Интерфейс командной строки#
Trino CLI предоставляет терминальную интерактивную оболочку для выполнения запросов. CLI представляет собой самоисполняемый JAR-файл, поэтому ведет себя как обычный исполняемый файл UNIX.
CLI использует Клиентский протокол поверх HTTP/HTTPS для взаимодействия с координатором в кластере.
Требования#
Trino CLI предъявляет следующие требования:
Java версии 11 или выше, доступная в
PATH. Java 22 или выше рекомендуется для лучшей производительности распаковки.Сетевой доступ по HTTP/HTTPS к координатору кластера Trino.
Сетевой доступ к настроенному объектному хранилищу, если включен Протокол спулинга.
Версия CLI должна совпадать с версией кластера Trino или быть новее. Более старые версии обычно работают, но регулярно тестируется только часть комбинаций. Версии до 350 не поддерживаются.
Установка#
Скачайте trino-cli-latest, переименуйте файл в trino, сделайте его
исполняемым с помощью chmod +x и запустите, чтобы вывести версию CLI:
./trino --version
Запустите CLI с --help или -h, чтобы увидеть все доступные опции.
Пользователи Windows и пользователи, которые не могут выполнить предыдущие
шаги, могут использовать эквивалентную команду java с опцией -jar, чтобы
запустить CLI и вывести версию:
java -jar trino-cli-*-executable.jar --version
Этот синтаксис можно использовать для примеров в следующих разделах. Кроме
того, команда java позволяет добавлять параметры конфигурации среды выполнения
Java с помощью синтаксиса -D. Это полезно для отладки и диагностики,
например при указании дополнительных параметров отладки Kerberos.
Запуск CLI#
Минимальная команда для запуска CLI в интерактивном режиме указывает URL координатора в кластере Trino:
./trino http://trino.example.com:8080
При успешном подключении появится приглашение для выполнения команд.
Используйте команду help, чтобы увидеть список поддерживаемых команд.
Используйте команду clear, чтобы очистить терминал. Чтобы остановить CLI и
выйти из него, выполните exit или quit:
trino> help
Supported commands:
QUIT
EXIT
CLEAR
EXPLAIN [ ( option [, ...] ) ] <query>
options: FORMAT { TEXT | GRAPHVIZ | JSON }
TYPE { LOGICAL | DISTRIBUTED | VALIDATE | IO }
DESCRIBE <table>
SHOW COLUMNS FROM <table>
SHOW FUNCTIONS
SHOW CATALOGS [LIKE <pattern>]
SHOW SCHEMAS [FROM <catalog>] [LIKE <pattern>]
SHOW TABLES [FROM <schema>] [LIKE <pattern>]
USE [<catalog>.]<schema>
Теперь можно выполнять SQL-операторы. После обработки CLI показывает результаты и статистику.
trino> SELECT count(*) FROM tpch.tiny.nation;
_col0
-------
25
(1 row)
Query 20220324_213359_00007_w6hbk, FINISHED, 1 node
Splits: 13 total, 13 done (100.00%)
2.92 [25 rows, 0B] [8 rows/s, 0B/s]
При запуске CLI можно задать каталог и схему по умолчанию. Это позволяет запрашивать таблицы напрямую, не указывая каталог и схему.
./trino http://trino.example.com:8080/tpch/tiny
trino:tiny> SHOW TABLES;
Table
----------
customer
lineitem
nation
orders
part
partsupp
region
supplier
(8 rows)
Каталог и схему по умолчанию также можно задать оператором USE.
trino> USE tpch.tiny;
USE
trino:tiny>
Для дополнительной настройки CLI в интерактивном режиме доступно множество других опций:
Опция |
Описание |
|---|---|
|
Задает каталог по умолчанию. При необходимости также используйте
|
|
Добавляет произвольный текст как дополнительную информацию о клиенте. |
|
Задает продолжительность обработки запроса, после которой клиентский запрос
завершается. По умолчанию — |
|
Добавляет дополнительные теги о клиенте и пользователе CLI. Несколько тегов разделяются запятыми. Теги можно использовать как входные данные для Resource groups. |
|
Включает отображение отладочной информации во время использования CLI для Устранение неполадок. Показывает больше сведений о статистике обработки запросов. |
|
Показывает размер данных и скорость в системе с основанием 10 (kB, MB и т. д.), а не в используемой по умолчанию системе с основанием 2 (KiB, MiB и т. д.). |
|
Отключает предложения автодополнения. |
|
Отключает сжатие результатов запросов. |
|
Задает сочетания клавиш в CLI, совместимые с редакторами VI или EMACS. По
умолчанию — |
|
Дополнительные учетные данные. Свойство можно использовать несколько раз;
формат — |
|
HTTP-заголовок, добавляемый к аутентифицированным HTTP-запросам. Свойство
можно использовать несколько раз; формат — |
|
Настраивает URL HTTP-прокси для подключения к Trino. |
|
Путь к файлу истории. По умолчанию — |
|
Настраивает уровень детализации сетевого журналирования CLI. По умолчанию —
|
|
Указывает формат для вывода результатов запроса. По
умолчанию — |
|
Путь к программе pager, используемой для отображения результатов запроса.
Установите пустое значение, чтобы полностью отключить постраничный вывод.
По умолчанию используется |
|
Не показывать ход обработки запроса. |
|
Задает SQL path по умолчанию для сеанса. Полезно для задания расположения каталога и схемы для Catalog user-defined functions. |
|
Запрашивает пароль. Используйте, если сервер Trino требует аутентификацию по
паролю. Чтобы избежать приглашения, можно задать переменную окружения
|
|
Задает схему по умолчанию. Должно использоваться вместе с |
|
HTTP/HTTPS-адрес и порт координатора Trino. Порт должен соответствовать
порту, на котором координатор Trino принимает подключения. Порт 80 для HTTP
и порт 443 для HTTPS можно опустить. Расположение сервера Trino по
умолчанию — |
|
Задает одно или несколько свойств сеанса.
Свойство можно использовать несколько раз в формате
|
|
Настраивает URL SOCKS-прокси для подключения к Trino. |
|
Указывает имя приложения или источника, подключающегося к Trino. По
умолчанию — |
|
Задает часовой пояс сеанса с помощью имени часового пояса. По умолчанию используется часовой пояс, заданный на вашей рабочей станции. |
|
Задает имя пользователя для Аутентификация по имени пользователя и паролю. По умолчанию используется имя пользователя операционной системы. Имя пользователя по умолчанию можно переопределить, если кластер использует другое имя пользователя или механизм аутентификации. |
Большинство опций также можно задать как параметры в URL. Это означает, что URL
JDBC можно использовать в CLI после удаления префикса jdbc:. Однако один и
тот же параметр нельзя указывать обоими способами. См. справочник параметров драйвера JDBC, чтобы узнать имена параметров URL.
Например:
./trino 'https://trino.example.com?SSL=true&SSLVerification=FULL&clientInfo=extra'
TLS/HTTPS#
Trino обычно доступен по HTTPS URL. Это означает, что весь сетевой трафик между CLI и Trino использует TLS. Конфигурация TLS часто используется, поскольку она требуется для любой аутентификации.
Используйте HTTPS URL для подключения к серверу:
./trino https://trino.example.com
Рекомендуемая реализация TLS — использовать глобально доверенный сертификат. В этом случае другие опции не нужны, поскольку JVM, запускающая CLI, распознает такие сертификаты.
Используйте опции из следующей таблицы для дополнительной настройки TLS и использования сертификатов:
Опция |
Описание |
|---|---|
|
Пропустить проверку сертификата при подключении с TLS/HTTPS. Следует использовать только для отладки. |
|
Расположение файла Java Keystore, содержащего сертификат сервера для подключения с TLS. |
|
Пароль для keystore. Он должен совпадать с паролем, указанным при создании keystore. |
|
Определяется форматом файла keystore. Тип keystore по умолчанию — JKS. Эта расширенная опция нужна только при использовании пользовательской реализации поставщика Java Cryptography Architecture (JCA). |
|
Использовать клиентский сертификат, полученный из системного keystore
операционной системы. Поддерживаются Windows и macOS. Для других
операционных систем используется Java keystore по умолчанию. Тип keystore
можно переопределить с помощью |
|
Пароль для truststore. Он должен совпадать с паролем, указанным при создании truststore. |
|
Расположение файла Java truststore, который будет использоваться для защиты TLS. |
|
Определяется форматом файла truststore. Тип keystore по умолчанию — JKS. Эта расширенная опция нужна только при использовании пользовательской реализации поставщика Java Cryptography Architecture (JCA). |
|
Проверять сертификат сервера с помощью системного truststore операционной
системы. Поддерживаются Windows и macOS. Для других операционных систем
используется Java truststore по умолчанию. Тип truststore можно
переопределить с помощью |
Аутентификация#
Trino CLI поддерживает многие типы аутентификации, подробно описанные в следующих разделах.
Аутентификация по имени пользователя и паролю#
Аутентификация по имени пользователя и паролю обычно настраивается в кластере с
помощью типа аутентификации PASSWORD,
например через LDAP-аутентификация или Аутентификация по файлу паролей.
Следующий пример подключается к серверу, задает имя пользователя и заставляет CLI запросить пароль:
./trino https://trino.example.com --user=exampleusername --password
Либо задайте пароль как значение переменной окружения TRINO_PASSWORD. Обычно
используют одинарные кавычки, чтобы избежать проблем со специальными символами,
такими как $:
export TRINO_PASSWORD='LongSecurePassword123!@#'
Если переменная окружения TRINO_PASSWORD задана, CLI не запрашивает пароль для
подключения.
./trino https://trino.example.com --user=exampleusername --password
Внешняя аутентификация — SSO#
Используйте опцию --external-authentication для браузерной SSO-аутентификации,
как подробно описано в OAuth 2.0-аутентификация. При такой конфигурации CLI
показывает URL, который нужно открыть в веб-браузере для аутентификации.
Подробное поведение:
Запустите CLI с опцией
--external-authenticationи выполните запрос.CLI запускается и подключается к Trino.
При отправке первого запроса в CLI появляется сообщение с указанием открыть браузер по заданному URL.
Откройте URL в браузере и пройдите процесс аутентификации.
CLI автоматически получает токен.
После успешной аутентификации в браузере CLI продолжает выполнение запроса.
Последующие запросы в сеансе CLI не требуют дополнительных входов, пока токен аутентификации остается действительным. Срок действия токена зависит от конфигурации типа внешней аутентификации.
Токены с истекшим сроком действия вынуждают войти снова.
Аутентификация по сертификату#
Используйте следующие аргументы CLI для подключения к кластеру, который использует аутентификацию по сертификату.
Опция |
Описание |
|---|---|
|
Абсолютный или относительный путь к файлу PEM или JKS, который должен содержать сертификат, доверенный кластером Trino, к которому выполняется подключение. |
|
Требуется только если у keystore есть пароль. |
Опции, связанные с truststore, не зависят от аутентификации клиентским сертификатом в CLI; вместо этого они управляют доверием клиента к сертификату сервера.
Аутентификация JWT#
Чтобы получить доступ к кластеру Trino, настроенному для использования
JWT-аутентификация, передайте JWT серверу с помощью опции
--access-token=<token>.
Аутентификация Kerberos#
Trino CLI может подключаться к кластеру Trino, где включен Kerberos-аутентификация.
Вызов CLI с включенной поддержкой Kerberos требует нескольких дополнительных опций командной строки. Также на машине, запускающей CLI, нужны файлы конфигурации Kerberos для вашего пользователя. Самый простой способ запустить CLI — использовать wrapper-скрипт:
#!/bin/bash
./trino \
--server https://trino.example.com \
--krb5-config-path /etc/krb5.conf \
--krb5-principal someuser@EXAMPLE.COM \
--krb5-keytab-path /home/someuser/someuser.keytab \
--krb5-remote-service-name trino
При использовании аутентификации Kerberos доступ к координатору Trino должен осуществляться через TLS и HTTPS.
В следующей таблице перечислены доступные опции для аутентификации Kerberos:
Опция |
Описание |
|---|---|
|
Путь к файлам конфигурации Kerberos. |
|
Путь к кэшу учетных данных Kerberos. |
|
Отключить каноникализацию имени хоста службы с помощью обратного DNS-поиска. |
|
Расположение keytab, который можно использовать для аутентификации principal,
указанного в |
|
Principal, используемый при аутентификации на координаторе. |
|
Имя службы Kerberos координатора Trino. |
|
Шаблон principal удаленной службы Kerberos. По умолчанию —
|
Дополнительная отладочная информация Kerberos#
Можно включить дополнительную отладочную информацию Kerberos для процесса Trino
CLI, передав -Dsun.security.krb5.debug=true,
-Dtrino.client.debugKerberos=true и
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext как
аргументы JVM при запуске процесса CLI:
java \
-Dsun.security.krb5.debug=true \
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext \
-Dtrino.client.debugKerberos=true \
-jar trino-cli-*-executable.jar \
--server https://trino.example.com \
--krb5-config-path /etc/krb5.conf \
--krb5-principal someuser@EXAMPLE.COM \
--krb5-keytab-path /home/someuser/someuser.keytab \
--krb5-remote-service-name trino
Помощь в интерпретации отладочных сообщений Kerberos см. в дополнительных ресурсах.
Постраничный вывод#
По умолчанию результаты запросов выводятся постранично с помощью программы
less, настроенной тщательно подобранным набором опций. Это поведение можно
переопределить, задав опцию --pager или переменную окружения TRINO_PAGER с
именем другой программы, например more или pspg,
либо можно задать пустое значение, чтобы полностью отключить постраничный вывод.
История#
CLI хранит историю ранее использованных команд. Историю можно просматривать прокруткой или поиском. Используйте стрелки вверх и вниз для прокрутки, а Control+S и Control+R для поиска. Чтобы выполнить запрос снова, нажмите Enter.
По умолчанию файл истории Trino находится в ~/.trino_history. Используйте
опцию --history-file или переменную окружения TRINO_HISTORY_FILE, чтобы
изменить значение по умолчанию.
Автопредложение#
CLI создает предложения автодополнения на основе истории команд.
Нажмите →, чтобы принять предложение и заменить текущий буфер командной строки. Нажмите Ctrl+→ (Option+→ на Mac), чтобы принять только следующее ключевое слово. Продолжайте ввод, чтобы отклонить предложение.
Файл конфигурации#
CLI может читать значения по умолчанию для всех опций из файла. Он использует первый найденный файл из упорядоченного списка расположений:
Путь к файлу, заданный значением переменной окружения
TRINO_CONFIG..trino_configв домашнем каталоге текущего пользователя.$XDG_CONFIG_HOME/trino/config.
Например, можно создать отдельные файлы конфигурации с разными опциями
аутентификации, такие как kerberos-cli.properties и ldap-cli.properties.
Если они находятся в текущем каталоге, можно задать переменную окружения
TRINO_CONFIG для одного запуска CLI, добавив ее перед командой trino:
TRINO_CONFIG=kerberos-cli.properties trino https://first-cluster.example.com:8443
TRINO_CONFIG=ldap-cli.properties trino https://second-cluster.example.com:8443
В предыдущем примере файлы конфигурации по умолчанию не используются.
Все поддерживаемые опции можно использовать в файле свойств конфигурации без
префикса --. Опции, которые обычно не принимают аргумент, являются
логическими, поэтому задавайте для них true или false. Например:
output-format-interactive=AUTO
timezone=Europe/Warsaw
user=trino-client
network-logging=BASIC
krb5-disable-remote-service-hostname-canonicalization=true
Пакетный режим#
Запуск Trino CLI с --execute, --file или передача запросов в стандартный
ввод использует пакетный, неинтерактивный режим. В этом режиме CLI не сообщает
о ходе выполнения и завершает работу после обработки переданных запросов. По
умолчанию результаты печатаются в формате CSV. Можно настроить другие форматы
и перенаправить вывод в файл.
Для дополнительной настройки CLI в пакетном режиме доступны следующие опции:
Опция |
Описание |
|---|---|
|
Выполнить указанные операторы и выйти. |
|
Выполнить операторы из файла и выйти. |
|
Продолжать обработку в пакетном режиме при возникновении ошибки. По умолчанию выполнение завершается немедленно. |
|
Указать формат для вывода результатов запроса. По
умолчанию — |
|
Показывать ход выполнения запроса в пакетном режиме. Это не влияет на вывод, который, например, можно безопасно перенаправить в файл. |
Примеры#
Рассмотрим следующую команду в показанном виде или с опцией
--output-format=CSV, которая используется по умолчанию в неинтерактивном
режиме:
trino --execute 'SELECT nationkey, name, regionkey FROM tpch.sf1.nation LIMIT 3'
Вывод выглядит так:
"0","ALGERIA","0"
"1","ARGENTINA","1"
"2","BRAZIL","1"
Вывод с опцией --output-format=JSON:
{"nationkey":0,"name":"ALGERIA","regionkey":0}
{"nationkey":1,"name":"ARGENTINA","regionkey":1}
{"nationkey":2,"name":"BRAZIL","regionkey":1}
Вывод с опцией --output-format=ALIGNED, которая используется по умолчанию в
интерактивном режиме:
nationkey | name | regionkey
----------+-----------+----------
0 | ALGERIA | 0
1 | ARGENTINA | 1
2 | BRAZIL | 1
Вывод с опцией --output-format=VERTICAL:
-[ RECORD 1 ]--------
nationkey | 0
name | ALGERIA
regionkey | 0
-[ RECORD 2 ]--------
nationkey | 1
name | ARGENTINA
regionkey | 1
-[ RECORD 3 ]--------
nationkey | 2
name | BRAZIL
regionkey | 1
Предыдущая команда с --output-format=NULL не выводит результат. Однако если в
запросе есть ошибка, например некорректное использование region вместо
regionkey, команда завершается со статусом 1 и показывает сообщение об ошибке
(на него формат вывода не влияет):
Query 20200707_170726_00030_2iup9 failed: line 1:25: Column 'region' cannot be resolved
SELECT nationkey, name, region FROM tpch.sf1.nation LIMIT 3
Протокол спулинга#
Trino CLI автоматически использует протокол спулинга для повышения пропускной способности клиентского взаимодействия с более высокими требованиями к передаче данных, если в кластере настроен Протокол спулинга.
При необходимости используйте опцию --encoding, чтобы настроить желаемую
кодировку, отличную от значения по умолчанию в кластере. Доступные значения:
json+zstd (рекомендуется) для JSON со сжатием Zstandard, json+lz4 для JSON
со сжатием LZ4 и json для несжатого JSON.
Процесс CLI должен иметь сетевой доступ к объектному хранилищу спулинга.
Форматы вывода#
Trino CLI предоставляет опции --output-format и
--output-format-interactive для управления отображением вывода. Доступные
опции, показанные в следующей таблице, нужно вводить в верхнем регистре.
Значение по умолчанию — ALIGNED в интерактивном режиме и CSV в
неинтерактивном режиме.
Опция |
Описание |
|---|---|
|
Значения, разделенные запятыми; каждое значение заключено в кавычки. Без строки заголовка. |
|
Значения, разделенные запятыми и заключенные в кавычки, со строкой заголовка. |
|
Значения, разделенные запятыми, без кавычек. |
|
Значения, разделенные запятыми, со строкой заголовка, но без кавычек. |
|
Значения, разделенные табуляцией. |
|
Значения, разделенные табуляцией, со строкой заголовка. |
|
Строки вывода выдаются как JSON-объекты с парами имя-значение. |
|
Вывод формируется как ASCII-таблица со значениями. |
|
Вывод формируется как ориентированные на записи строки сверху вниз, по одной строке на значение. |
|
То же, что |
|
Вывод формируется как таблица Markdown. |
|
Подавляет обычные результаты запроса. Это может быть полезно при разработке для проверки кода возврата shell-команды запроса или для проверки того, приводит ли запрос к сообщениям об ошибке. |
Устранение неполадок#
Если что-то идет не так, отображается сообщение об ошибке:
$ trino
trino> select count(*) from tpch.tiny.nations;
Query 20200804_201646_00003_f5f6c failed: line 1:22: Table 'tpch.tiny.nations' does not exist
select count(*) from tpch.tiny.nations
Чтобы увидеть отладочную информацию, включая stack trace для ошибок,
используйте опцию --debug:
$ trino --debug
trino> select count(*) from tpch.tiny.nations;
Query 20200804_201629_00002_f5f6c failed: line 1:22: Table 'tpch.tiny.nations' does not exist
io.trino.spi.TrinoException: line 1:22: Table 'tpch.tiny.nations' does not exist
at io.trino.sql.analyzer.SemanticExceptions.semanticException(SemanticExceptions.java:48)
at io.trino.sql.analyzer.SemanticExceptions.semanticException(SemanticExceptions.java:43)
...
at java.base/java.lang.Thread.run(Thread.java:834)
select count(*) from tpch.tiny.nations