
Trino Queries
CertifiedExecute multiple SQL statements using Trino query engine
Trino Queries
Execute multiple SQL statements using Trino query engine
Runs one or more SQL statements separated by semicolons using Trino distributed SQL query engine.
Statements run without wrapping them in a transaction by default (transaction: false), as Trino catalogs like memory accept writes in autocommit mode only.
Set transaction: true to run them in one transaction.
The id the coordinator assigned to each query is returned in the queryId of the statement outputs and in the statements file, and its Trino query stats metrics are emitted.
With fetchType NONE, result sets are not drained just to collect stats, so emitted stats may be incomplete.
Supports parameterized queries and all fetch modes. Default fetchSize is 10,000 rows.
type: io.kestra.plugin.jdbc.trino.QueriesExamples
Create a table, insert rows and query them in one task
id: trino_queries
namespace: company.team
tasks:
- id: transform
type: io.kestra.plugin.jdbc.trino.Queries
url: jdbc:trino://localhost:8080/memory
username: "{{ secret('TRINO_USERNAME') }}"
sql: |
CREATE TABLE IF NOT EXISTS memory.default.orders_agg AS SELECT 1 AS id;
INSERT INTO memory.default.orders_agg VALUES (2);
SELECT COUNT(*) AS rows_count FROM memory.default.orders_agg
fetchType: FETCH
- id: log_results
type: io.kestra.plugin.core.log.Log
message: "{{ outputs.transform.outputs[0].rows[0].rows_count }}"
Authenticate with an access token and run the statements in autocommit mode
id: trino_queries_token
namespace: company.team
tasks:
- id: ingest
type: io.kestra.plugin.jdbc.trino.Queries
url: jdbc:trino://trino.example.com:443/memory
ssl: true
accessToken: "{{ secret('TRINO_ACCESS_TOKEN') }}"
source: kestra_ingest
sql: |
DELETE FROM memory.default.orders;
INSERT INTO memory.default.orders SELECT * FROM tpch.tiny.orders
fetchType: NONE
Installation
Our standard Docker images already include this plugin. If you use a -slim image or another setup, install it with the following command:
kestractl plugins get io.kestra.plugin:plugin-jdbc-trino --compatible-for $KESTRA_VERSION For kestractl, use your Kestra version with --compatible-for, or specify an exact plugin version.
For Kestra CLI, replace LATEST with a specific version or version range to pin the plugin version.
Properties
sql *string
SQL statement(s) to execute
Runs one or more SQL statements rendered with flow variables. Query tasks accept a single statement; Queries tasks can execute multiple statements separated by semicolons
url *string
The JDBC URL to connect to the database
accessToken string
The Trino access token used for JWT-based authentication
Sent as the accessToken connection property of the Trino JDBC driver, typically through {{ secret('TRINO_ACCESS_TOKEN') }} for an engine behind an OAuth2/OIDC authentication provider.
Browser-based OAuth2 (externalAuthentication) is not supported as it cannot complete on a headless worker.
afterSQL string
SQL to execute after main query in same transaction
Optional SQL executed in the same transaction after the main statement. Useful for marking rows as processed to avoid duplicates; only a single statement is allowed. Commit covers both sql and afterSQL
assets
Assets this task consumes as inputs or produces as outputs, for lineage tracking and the asset graph (Enterprise Edition). A flow declaring this property on a task is rejected in the open-source edition.
io.kestra.core.models.assets.AssetsDeclaration
IGNOREFAILWARNAsset failure behavior
Behavior applied to the task state when a declared asset fails to render, emit, or be persisted (e.g. a lock conflict): FAIL escalates it to FAILED, WARN (default) warns it if it would otherwise succeed, IGNORE leaves the state untouched.
Whether to auto-register assets referenced dynamically at runtime that are not statically declared in inputs or outputs.
The assets consumed as inputs.
io.kestra.core.models.assets.AssetIdentifier
1The assets produced as outputs.
io.kestra.plugin.ee.assets.Dataset
1150{}1150io.kestra.plugin.ee.assets.File
1150{}1150io.kestra.plugin.ee.assets.Table
1150{}1150io.kestra.plugin.ee.assets.VM
1150{}1150io.kestra.core.models.assets.External
1150{}1150io.kestra.core.models.assets.Custom
11501Custom asset type
{}1150catalog string
The default catalog the connection runs against
Alternative to including the catalog in the JDBC URL path (jdbc: trino://host: port/<catalog>).
clientTags array
The tags attached to the queries run by this task
Lets Trino administrators route Kestra queries in resource groups managed by resourceGroupManager. Passed to the driver as the clientTags connection property (comma-separated tag names).
columnStats booleanstring
falseCompute per-column statistics of the fetched rows
When true, writes an ION file with one entry per column (column, jdbcType, nulls, distinct (approximate), min, max, mean, median, minLen, maxLen) and exposes its URI in the columnStats output.
Statistics are computed while the rows are read, without running a second query. Only applies to fetchType FETCH and STORE; LOB, binary and array columns are skipped.
min and max are omitted for string columns longer than 256 characters, and median is computed on a bounded sample of the values
columnStatsSampleRows integerstring
100000Number of rows used to compute column statistics
Only used when columnStats is true. Statistics stop at this many rows while all rows are still fetched or stored. Must be at least 1. Default: 100,000
extraCredentials object
Extra authentication or connector-specific credentials sent as extraCredentials
Name: value pairs forwarded to the coordinator as authentication extra credentials (e.g. Kerberos delegation tokens, cloud object store keys for catalog authentication). The driver serializes them as name: value pairs joined with ;.
fetchSize integerstring
10000Number of rows to fetch per database round trip
Controls JDBC fetch size for STORE mode. Default: 10,000 rows; use Integer.MIN_VALUE for MySQL streaming. Ignored for FETCH and FETCH_ONE
fetchType string
NONESTOREFETCHFETCH_ONENONEResult fetching mode
FETCH returns all rows, FETCH_ONE returns the first row only, STORE streams rows to internal storage (ION), NONE returns no data. Default: NONE
kerberosConfig string
The Kerberos configuration (krb5.conf) file content
Written to the task working directory and passed to the driver as KerberosConfigPath.
kerberosKeytab string
The keytab file content holding the user Kerberos keys
Written to the task working directory and passed to the driver as KerberosKeytabPath, so the keytab does not have to be pre-mounted on the worker.
kerberosPrincipal string
The Kerberos principal the connection authenticates as
Passed to the driver as KerberosPrincipal.
kerberosRemoteServiceName string
The remote service (cluster coordinator) name Kerberos tickets are requested for
Passed to the driver as KerberosRemoteServiceName.
outputFiles array
Output file names to capture after SQL execution
Creates named temporary files in the task working directory before the SQL runs, making their absolute paths available as {{ outputFiles.name }} Pebble variables in the SQL template. Only supported by embedded, in-process drivers (DuckDB, SQLite) where the database engine writes to the same filesystem as the Kestra worker. Remote database drivers (Postgres, MySQL, etc.) do not support this — they execute SQL on a separate server that cannot write to the Kestra worker filesystem.
outputStatement booleanstring
falseExpose the executed SQL statement in the outputs
When true, the rendered SQL is exposed in the statement output, with the values of the secret() calls used in sql replaced by *** and truncated to 64 KiB.
Disabled by default so that SQL text never leaks into outputs unless requested
parameters object
Named parameter bindings for SQL query
Map of parameter names to values, bound to : name placeholders as prepared-statement parameters; supports nulls and typed values. Colons in literals, quoted identifiers, comments and :: casts are left as is; a : name missing from this map is bound to NULL with a warning.
password string
The database user's password
roles object
The catalog roles to use, as a catalog name to role mapping
Role values are a named role (e.g. admin), all or none, and the pseudo-catalog system sets the role of every catalog without an explicit entry. Passed to the driver as the roles connection property (catalog: role values joined with ;).
schema string
The default schema the connection runs against
Only used when catalog is set, either here or in the JDBC URL path.
sessionProperties object
The Trino session properties to set at connection time
Catalog-scoped properties use the catalog.property Java-style name (e.g. hive.parquet_use_column_names). Passed to the driver as the sessionProperties connection property (name: value pairs joined with ;).
source string
The client source name reported to the coordinator for every query of this task
Visible in system.runtime.queries and in the coordinator UI and usable in resourceGroupManager selectors: defaults to kestra so Kestra traffic can be identified and capacity-planned independently of other Trino clients.
ssl booleanstring
Whether to use TLS/SSL when connecting to Trino
Sets the SSL connection property of the Trino JDBC driver.
Required with a password (the driver refuses authentication with a password over plain HTTP) and when the coordinator certificate must be validated by sslTrustStore.
This is the only property the driver accepts both from the URL and here; when set it overrides the URL value.
sslKeyStore string
The client keystore content used for mutual TLS (client certificate) authentication
The keystore content (the bytes of a PKCS12 or JKS keystore base64-encoded, or a kestra:// internal storage file URI), written to the task working directory and passed to the driver as SSLKeyStorePath, so nothing has to be pre-mounted on the worker. When this is set, ssl: true is expected as well.
sslKeyStorePassword string
The password of the client keystore, when it is protected
sslKeyStoreType string
The type of the client keystore, PKCS12 (default) or JKS
Passed to the driver as SSLKeyStoreType.
sslTrustStore string
The truststore content used to validate the Trino coordinator certificate chain
The truststore content (the bytes of a PKCS12 or JKS truststore base64-encoded, or a kestra:// internal storage file URI), written to the task working directory and passed to the driver as SSLTrustStorePath.
sslTrustStorePassword string
The password of the truststore, when it is protected
sslTrustStoreType string
The type of the truststore, PKCS12 (default) or JKS
Passed to the driver as SSLTrustStoreType.
sslVerification string
FULLCANONEThe TLS/SSL certificate verification policy used by the Trino JDBC driver
FULL (driver default) validates the server certificate chain against the JVM truststore, CA validates it against the configured sslTrustStore only, and NONE skips validation (for example, a self-signed development coordinator).
timeZoneId string
The time zone id to use for date/time manipulation. Default value is the worker's default time zone id
transaction booleanstring
falseTransaction
If one query failed, rollback transactions.
username string
The database user
Outputs
affectedRows array
The number of affected rows for each query that doesn't return a result set
One entry per INSERT, UPDATE, DELETE or DDL statement, in execution order, as reported by the JDBC driver (DDL statements usually report 0). Queries returning a result set are not included here; their results are in outputs.
bytes integer
Total size of the stored result files in bytes
Only populated when fetchType is STORE
columnStats string
uriURI of the column statistics file in internal storage
Only populated when columnStats is true and fetchType is FETCH or STORE; columns of all result sets are merged by name
durationMs integer
Total execution duration in milliseconds
Includes reading the result rows of every statement
outputs array
The list of per-query outputs
io.kestra.plugin.jdbc.AbstractJdbcBaseQuery-Output
Size of the stored result file in bytes
Only populated when fetchType is STORE
uriURI of the column statistics file in internal storage
Only populated when columnStats is true and fetchType is FETCH or STORE; file is stored in ION format
Statement execution duration in milliseconds
Includes reading the result rows
Engine query identifier
The id the engine coordinator assigned to the query, for example the Trino query id. Not set when the engine does not expose one.
First row of fetched data
Only populated when fetchType is FETCH_ONE
List of all fetched rows
Only populated when fetchType is FETCH
Number of rows affected by the statement
Reported by the JDBC driver for INSERT, UPDATE, DELETE and similar statements. Not set when the statement returns a result set or when the driver does not report a count
Number of rows fetched
Only populated when fetchType is FETCH or STORE
Executed SQL statement
Only populated when outputStatement is true. Values of secret() calls are replaced by *** and the text is truncated to 64 KiB
Tables read or written by the statement
Detected from the SQL text, so this is a best effort: CTEs, temporary tables and dialect specific syntax can lower the confidence or be missed.
Limited to 50 entries, see tablesTruncated
io.kestra.plugin.jdbc.SqlTableExtractor-TableReference
READWRITECREATEDROPHow the statement uses the table
One of READ, WRITE, CREATE or DROP.
MEDIUMLOWHow reliable the detection is
MEDIUM when detected from the SQL text, LOW for temporary tables and ambiguous names.
Database name
Null when the statement does not qualify the table with a database.
TABLEFILEURLKind of source
Only set on DuckDB: TABLE, FILE or URL (files read through read_parquet, read_csv, ATTACH and quoted paths).
Table name
For DuckDB file reads, the file path or URL.
Schema name
Null when the statement does not qualify the table with a schema.
Whether the tables list was cut at 50 entries
uriURI of stored results in internal storage
Only populated when fetchType is STORE; file is stored in internal storage using ION format
Number of SQL warnings raised by the statement
Count of the SQLWarning chain reported by the driver, for example Postgres notices
rowsAffected integer
Total number of rows affected by all statements
Sum of affectedRows. Not set when no statement reported an update count
statement string
Executed SQL statements
Only populated when outputStatement is true. Values of secret() calls are replaced by *** and the text is truncated to 64 KiB
statementCount integer
Number of executed statements
When the driver runs the whole script in a single batch (transactional Snowflake, Redshift and Sybase scripts), the script counts as one statement
statements string
uriURI of the per-statement details file in internal storage
ION file with one {index, kind, rowsAffected, durationMs} entry per executed statement,
plus queryId for engines that expose one (e.g. Trino).
tables array
Tables read or written by the statements
Detected from the SQL text, so this is a best effort: CTEs, temporary tables and dialect specific syntax can lower the confidence or be missed.
Limited to 50 entries, see tablesTruncated
io.kestra.plugin.jdbc.SqlTableExtractor-TableReference
READWRITECREATEDROPHow the statement uses the table
One of READ, WRITE, CREATE or DROP.
MEDIUMLOWHow reliable the detection is
MEDIUM when detected from the SQL text, LOW for temporary tables and ambiguous names.
Database name
Null when the statement does not qualify the table with a database.
TABLEFILEURLKind of source
Only set on DuckDB: TABLE, FILE or URL (files read through read_parquet, read_csv, ATTACH and quoted paths).
Table name
For DuckDB file reads, the file path or URL.
Schema name
Null when the statement does not qualify the table with a schema.
tablesTruncated boolean
Whether the tables list was cut at 50 entries
warnings integer
Number of SQL warnings raised by the statements
Count of the SQLWarning chains reported by the driver across all statements
Metrics
bytes counter
bytesThe size of the stored result file.
cpu.time timer
The total CPU time spent by the Trino coordinator for the queries.
duration timer
The duration of the SQL execution, including reading the result rows.
fetch.size counter
rowsThe number of fetched rows.
peak.memory.bytes counter
bytesThe peak memory bytes used by the Trino coordinator for the queries.
physical.written.bytes counter
bytesThe number of bytes physically written by the Trino coordinator for the queries.
processed.bytes counter
bytesThe number of bytes processed by the Trino coordinator for the queries.
processed.rows counter
rowsThe number of rows processed by the Trino coordinator for the queries.
queued.time timer
The time the queries spent queued on the Trino coordinator before running.
rows.affected counter
rowsThe number of rows affected, as reported by the JDBC driver.
wall.time timer
The wall clock time spent by the Trino coordinator for the queries.