Trino CLI#


Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.

The Trino CLI provides a terminal-based, interactive shell for running queries. The CLI is a self-executing JAR file, which means it acts like a normal UNIX executable.


The CLI requires a Java virtual machine available on the path. It can be used with Java version 8 and higher.

The CLI uses the Trino client REST API over HTTP/HTTPS to communicate with the coordinator on the cluster.

The CLI version should be identical to the version of the Trino cluster, or newer. Older versions typically work, but only a subset is regularly tested. Versions before 350 are not supported.


Download trino-cli-442-executable.jar, rename it to trino, make it executable with chmod +x, and run it to show the version of the CLI:

./trino --version

Run the CLI with --help or -h to see all available options.

Windows users, and users unable to execute the preceeding steps, can use the equivalent java command with the -jar option to run the CLI, and show the version:

java -jar trino-cli-*-executable.jar --version

The syntax can be used for the examples in the following sections. In addition, using the java command allows you to add configuration options for the Java runtime with the -D syntax. You can use this for debugging and troubleshooting, such as when specifying additional Kerberos debug options.

Running the CLI#

The minimal command to start the CLI in interactive mode specifies the URL of the coordinator in the Trino cluster:


If successful, you will get a prompt to execute commands. Use the help command to see a list of supported commands. Use the clear command to clear the terminal. To stop and exit the CLI, run exit or quit.:

trino> help

Supported commands:
EXPLAIN [ ( option [, ...] ) ] <query>
    options: FORMAT { TEXT | GRAPHVIZ | JSON }
DESCRIBE <table>
SHOW SCHEMAS [FROM <catalog>] [LIKE <pattern>]
SHOW TABLES [FROM <schema>] [LIKE <pattern>]
USE [<catalog>.]<schema>

You can now run SQL statements. After processing, the CLI will show results and statistics.

trino> SELECT count(*) FROM tpch.tiny.nation;

(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]

As part of starting the CLI, you can set the default catalog and schema. This allows you to query tables directly without specifying catalog and schema.


trino:tiny> SHOW TABLES;

(8 rows)

You can also set the default catalog and schema with the USE statement.

trino> USE tpch.tiny;

Many other options are available to further configure the CLI in interactive mode:




Sets the default catalog. You can change the default catalog and schema with USE.


Adds arbitrary text as extra information about the client.


Sets the duration for query processing, after which, the client request is terminated. Defaults to 2m.


Adds extra tags information about the client and the CLI user. Separate multiple tags with commas. The tags can be used as input for Resource groups.


Enables display of debug information during CLI usage for Troubleshooting. Displays more information about query processing statistics.


Disables autocomplete suggestions.


Disables compression of query results.


Sets key bindings in the CLI to be compatible with VI or EMACS editors. Defaults to EMACS.


Configures the URL of the HTTP proxy to connect to Trino.


Path to the history file. Defaults to ~/.trino_history.


Configures the level of detail provided for network logging of the CLI. Defaults to NONE, other options are BASIC, HEADERS, or BODY.


Specify the format to use for printing query results. Defaults to ALIGNED.


Path to the pager program used to display the query results. Set to an empty value to completely disable pagination. Defaults to less with a carefully selected set of options.


Do not show query processing progress.


Prompts for a password. Use if your Trino server requires password authentication. You can set the TRINO_PASSWORD environment variable with the password value to avoid the prompt. For more information, see Username and password authentication.


Sets the default schema. You can change the default catalog and schema with USE.


The HTTP/HTTPS address and port of the Trino coordinator. The port must be set to the port the Trino coordinator is listening for connections on. Trino server location defaults to http://localhost:8080. Can only be set if URL is not specified.


Sets one or more session properties. Property can be used multiple times with the format session_property_name=value.


Configures the URL of the SOCKS proxy to connect to Trino.


Specifies the name of the application or source connecting to Trino. Defaults to trino-cli. The value can be used as input for Resource groups.


Sets the time zone for the session using the time zone name. Defaults to the timezone set on your workstation.


Sets the username for Username and password authentication. Defaults to your operating system username. You can override the default username, if your cluster uses a different username or authentication mechanism.

Most of the options can also be set as parameters in the URL. This means a JDBC URL can be used in the CLI after removing the jdbc: prefix. However, the same parameter may not be specified using both methods. See the JDBC driver parameter reference to find out URL parameter names. For example:

./trino ''


Trino is typically available with an HTTPS URL. This means that all network traffic between the CLI and Trino uses TLS. TLS configuration is common, since it is a requirement for any authentication.

Use the HTTPS URL to connect to the server:


The recommended TLS implementation is to use a globally trusted certificate. In this case, no other options are necessary, since the JVM running the CLI recognizes these certificates.

Use the options from the following table to further configure TLS and certificate usage:




Skip certificate validation when connecting with TLS/HTTPS (should only be used for debugging).


The location of the Java Keystore file that contains the certificate of the server to connect with TLS.


The password for the keystore. This must match the password you specified when creating the keystore.


Determined by the keystore file format. The default keystore type is JKS. This advanced option is only necessary if you use a custom Java Cryptography Architecture (JCA) provider implementation.


The password for the truststore. This must match the password you specified when creating the truststore.


The location of the Java truststore file that will be used to secure TLS.


Determined by the truststore file format. The default keystore type is JKS. This advanced option is only necessary if you use a custom Java Cryptography Architecture (JCA) provider implementation.


Verify the server certificate using the system truststore of the operating system. Windows and macOS are supported. For other operating systems, the default Java truststore is used. The truststore type can be overridden using --truststore-type.


The Trino CLI supports many Способы аутентификации detailed in the following sections:

Username and password authentication#

Username and password authentication is typically configured in a cluster using the PASSWORD authentication type, for example with LDAP аутентификация or Аутентификация с помощью файла.

The following code example connects to the server, establishes your user name, and prompts the CLI for your password:

./trino --user=exampleusername --password

Alternatively, set the password as the value of the TRINO_PASSWORD environment variable. Typically use single quotes to avoid problems with special characters such as $:

export TRINO_PASSWORD='LongSecurePassword123!@#'

If the TRINO_PASSWORD environment variable is set, you are not prompted to provide a password to connect with the CLI.

./trino --user=exampleusername --password

External authentication - SSO#

Use the --external-authentication option for browser-based SSO authentication, as detailed in OAuth 2.0 аутентификация. With this configuration, the CLI displays a URL that you must open in a web browser for authentication.

The detailed behavior is as follows:

  • Start the CLI with the --external-authentication option and execute a query.

  • The CLI starts and connects to Trino.

  • A message appears in the CLI directing you to open a browser with a specified URL when the first query is submitted.

  • Open the URL in a browser and follow through the authentication process.

  • The CLI automatically receives a token.

  • When successfully authenticated in the browser, the CLI proceeds to execute the query.

  • Further queries in the CLI session do not require additional logins while the authentication token remains valid. Token expiration depends on the external authentication type configuration.

  • Expired tokens force you to log in again.

Certificate authentication#

Use the following CLI arguments to connect to a cluster that uses certificate authentication.

CLI options for certificate authentication#




Absolute or relative path to a PEM or JKS file, which must contain a certificate that is trusted by the Trino cluster you are connecting to.


Only required if the keystore has a password.

The truststore related options are independent of client certificate authentication with the CLI; instead, they control the client’s trust of the server’s certificate.

JWT authentication#

To access a Trino cluster configured to use JWT аутентификация, use the --access-token=<token> option to pass a JWT to the server.

Kerberos authentication#

The Trino CLI can connect to a Trino cluster that has Kerberos аутентификация enabled.

Invoking the CLI with Kerberos support enabled requires a number of additional command line options. You also need the Kerberos configuration files for your user on the machine running the CLI. The simplest way to invoke the CLI is with a wrapper script:


./trino \
  --server \
  --krb5-config-path /etc/krb5.conf \
  --krb5-principal someuser@EXAMPLE.COM \
  --krb5-keytab-path /home/someuser/someuser.keytab \
  --krb5-remote-service-name trino

When using Kerberos authentication, access to the Trino coordinator must be through TLS and HTTPS.

The following table lists the available options for Kerberos authentication:

CLI options for Kerberos authentication#




Path to Kerberos configuration files.


Kerberos credential cache path.


Disable service hostname canonicalization using the DNS reverse lookup.


The location of the keytab that can be used to authenticate the principal specified by --krb5-principal.


The principal to use when authenticating to the coordinator.


Trino coordinator Kerberos service name.


Remote kerberos service principal pattern. Defaults to ${SERVICE}@${HOST}.

Additional Kerberos debugging information#

You can enable additional Kerberos debugging information for the Trino CLI process by passing, -Dtrino.client.debugKerberos=true, and,configfile,configparser,logincontext as a JVM argument when starting the CLI process:

java \ \,configfile,configparser,logincontext \
  -Dtrino.client.debugKerberos=true \
  -jar trino-cli-*-executable.jar \
  --server \
  --krb5-config-path /etc/krb5.conf \
  --krb5-principal someuser@EXAMPLE.COM \
  --krb5-keytab-path /home/someuser/someuser.keytab \
  --krb5-remote-service-name trino

For help with interpreting Kerberos debugging messages, see additional resources.


By default, the results of queries are paginated using the less program which is configured with a carefully selected set of options. This behavior can be overridden by setting the --pager option or the TRINO_PAGER environment variable to the name of a different program such as more or pspg, or it can be set to an empty value to completely disable pagination.


The CLI keeps a history of your previously used commands. You can access your history by scrolling or searching. Use the up and down arrows to scroll and Control+S and Control+R to search. To execute a query again, press Enter.

By default, you can locate the Trino history file in ~/.trino_history. Use the --history-file option or the `TRINO_HISTORY_FILE environment variable to change the default.

Auto suggestion#

The CLI generates autocomplete suggestions based on command history.

Press to accept the suggestion and replace the current command line buffer. Press Ctrl+ (Option+ on Mac) to accept only the next keyword. Continue typing to reject the suggestion.

Configuration file#

The CLI can read default values for all options from a file. It uses the first file found from the ordered list of locations:

  • File path set as value of the TRINO_CONFIG environment variable.

  • .trino_config in the current users home directory.

  • $XDG_CONFIG_HOME/trino/config.

For example, you could create separate configuration files with different authentication options, like and Assuming they’re located in the current directory, you can set the TRINO_CONFIG environment variable for a single invocation of the CLI by adding it before the trino command: trino trino

In the preceding example, the default configuration files are not used.

You can use all supported options without the -- prefix in the configuration properties file. Options that normally don’t take an argument are boolean, so set them to either true or false. For example:


Batch mode#

Running the Trino CLI with the --execute, --file, or passing queries to the standard input uses the batch (non-interactive) mode. In this mode the CLI does not report progress, and exits after processing the supplied queries. Results are printed in CSV format by default. You can configure other formats and redirect the output to a file.

The following options are available to further configure the CLI in batch mode:




Execute specified statements and exit.

-f, --file=<file>

Execute statements from file and exit.


Continue processing in batch mode when an error occurs. Default is to exit immediately.


Specify the format to use for printing query results. Defaults to CSV.


Show query progress in batch mode. It does not affect the output, which, for example can be safely redirected to a file.


Consider the following command run as shown, or with the --output-format=CSV option, which is the default for non-interactive usage:

trino --execute 'SELECT nationkey, name, regionkey FROM tpch.sf1.nation LIMIT 3'

The output is as follows:


The output with the --output-format=JSON option:


The output with the --output-format=ALIGNED option, which is the default for interactive usage:

nationkey |   name    | regionkey
        0 | ALGERIA   |         0
        1 | ARGENTINA |         1
        2 | BRAZIL    |         1

The output with the --output-format=VERTICAL option:

-[ RECORD 1 ]--------
nationkey | 0
name      | ALGERIA
regionkey | 0
-[ RECORD 2 ]--------
nationkey | 1
name      | ARGENTINA
regionkey | 1
-[ RECORD 3 ]--------
nationkey | 2
name      | BRAZIL
regionkey | 1

The preceding command with --output-format=NULL produces no output. However, if you have an error in the query, such as incorrectly using region instead of regionkey, the command has an exit status of 1 and displays an error message (which is unaffected by the output format):

Query 20200707_170726_00030_2iup9 failed: line 1:25: Column 'region' cannot be resolved
SELECT nationkey, name, region FROM tpch.sf1.nation LIMIT 3

Output formats#

The Trino CLI provides the options --output-format and --output-format-interactive to control how the output is displayed. The available options shown in the following table must be entered in uppercase. The default value is ALIGNED in interactive mode, and CSV in non-interactive mode.

Output format options#




Comma-separated values, each value quoted. No header row.


Comma-separated values, quoted with header row.


Comma-separated values without quotes.


Comma-separated values with header row but no quotes.


Tab-separated values.


Tab-separated values with header row.


Output rows emitted as JSON objects with name-value pairs.


Output emitted as an ASCII character table with values.


Output emitted as record-oriented top-down lines, one per value.


Same as ALIGNED if output would fit the current terminal width, and VERTICAL otherwise.


Output emitted as a Markdown table.


Suppresses normal query results. This can be useful during development to test a query’s shell return code or to see whether it results in error messages.


If something goes wrong, you see an error message:

$ 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

To view debug information, including the stack trace for failures, use the --debug option:

$ 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(
at io.trino.sql.analyzer.SemanticExceptions.semanticException(
at java.base/
select count(*) from tpch.tiny.nations