sql_select
Runs an SQL select query against a database and returns the result as an array of objects, one for each row returned, containing a key for each column queried and its value.
- Common
- Advanced
# Common config fields, showing default values
label: ""
sql_select:
driver: "" # No default (required)
dsn: clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms&max_execution_time=60 # No default (required)
table: foo # No default (required)
columns: [] # No default (required)
where: meow = ? and woof = ? # No default (optional)
args_mapping: root = [ this.cat.meow, this.doc.woofs[0] ] # No default (optional)
# All config fields, showing default values
label: ""
sql_select:
driver: "" # No default (required)
dsn: clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms&max_execution_time=60 # No default (required)
table: foo # No default (required)
columns: [] # No default (required)
where: meow = ? and woof = ? # No default (optional)
args_mapping: root = [ this.cat.meow, this.doc.woofs[0] ] # No default (optional)
prefix: "" # No default (optional)
suffix: "" # No default (optional)
init_files: [] # No default (optional)
init_statement: | # No default (optional)
CREATE TABLE IF NOT EXISTS some_table (
foo varchar(50) not null,
bar integer,
baz varchar(50),
primary key (foo)
) WITHOUT ROWID;
init_verify_conn: false
conn_max_idle_time: "" # No default (optional)
conn_max_life_time: "" # No default (optional)
conn_max_idle: 2
conn_max_open: 0 # No default (optional)
secret_name: "" # No default (optional)
iam_enabled: false
azure:
entra_enabled: false
token_request_options:
claims: ""
enable_cae: false
scopes:
- https://ossrdbms-aad.database.windows.net/.default
tenant_id: ""
region: ""
endpoint: ""
credentials:
profile: ""
id: ""
secret: ""
token: ""
from_ec2_role: false
role: ""
role_external_id: ""
expiry_window: ""
If the query fails to execute then the message will remain unchanged and the error can be caught using error handling methods outlined here.
Examples
- Table Query (PostgreSQL)
Here we query a database for columns of footable that share a user_id
with the message user.id. A branch processor
is used in order to insert the resulting array into the original message at the
path foo_rows:
pipeline:
processors:
- branch:
processors:
- sql_select:
driver: postgres
dsn: postgres://foouser:foopass@localhost:5432/testdb?sslmode=disable
table: footable
columns: [ '*' ]
where: user_id = ?
args_mapping: '[ this.user.id ]'
result_map: 'root.foo_rows = this'
Fields
driver
A database driver to use.
Type: string
Options: mysql, postgres, clickhouse, mssql, sqlite, oracle, snowflake, trino, gocosmos, spanner, duckdb.
dsn
A Data Source Name to identify the target database.
Drivers
The following is a list of supported drivers, their placeholder style, and their respective DSN formats:
| Driver | Data Source Name Format |
|---|---|
clickhouse | clickhouse://[username[:password]@][netloc][:port]/dbname[?param1=value1&...¶mN=valueN] |
mysql | [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] |
postgres | postgres://[user[:password]@][netloc][:port][/dbname][?param1=value1&...] |
mssql | sqlserver://[user[:password]@][netloc][:port][?database=dbname¶m1=value1&...] |
sqlite | file:/path/to/filename.db[?param&=value1&...] |
oracle | oracle://[username[:password]@][netloc][:port]/service_name?server=server2&server=server3 |
snowflake | username[:password]@account_identifier/dbname/schemaname[?param1=value&...¶mN=valueN] |
spanner | projects/[project]/instances/[instance]/databases/dbname |
trino | http[s]://user[:pass]@host[:port][?parameters] |
gocosmos | AccountEndpoint=<cosmosdb-endpoint>;AccountKey=<cosmosdb-account-key>[;TimeoutMs=<timeout-in-ms>][;Version=<cosmosdb-api-version>][;DefaultDb/Db=<db-name>][;AutoId=<true/false>][;InsecureSkipVerify=<true/false>] |
duckdb | /path/to/filename.duckdb[?config_option=value&...] or :memory: for ephemeral in-process storage. |
Please note that the postgres driver enforces SSL by default, you can override this with the parameter sslmode=disable if required.
The mssql driver supports using Kerberos authentication instead of the default ntlm (on Unix) or winsspi (on Windows). To do this, add the parameter authenticator=krb5 to the DSN. For a list of supported Kerberos configuration options, please refer to the documentation. An example DSN with Kerberos enabled and username/password authentication: sqlserver://user@EXAMPLE.COM:pass@host:1433?database=db&authenticator=krb5
The snowflake driver supports multiple DSN formats. Please consult the docs for more details. For key pair authentication, the DSN has the following format: <snowflake_user>@<snowflake_account>/<db_name>/<schema_name>?warehouse=<warehouse>&role=<role>&authenticator=snowflake_jwt&privateKey=<base64_url_encoded_private_key>, where the value for the privateKey parameter can be constructed from an unencrypted RSA private key file rsa_key.p8 using openssl enc -d -base64 -in rsa_key.p8 | basenc --base64url -w0 (you can use gbasenc insted of basenc on OSX if you install coreutils via Homebrew). If you have a password-encrypted private key, you can decrypt it using openssl pkcs8 -in rsa_key_encrypted.p8 -out rsa_key.p8. Also, make sure fields such as the username are URL-encoded.
The gocosmos driver is still experimental, but it has support for hierarchical partition keys as well as cross-partition queries. Please refer to the SQL notes for details.
The duckdb driver requires cgo to link the DuckDB static library. It is only available in builds with the x_bento_extra build tag or the CGO-enabled Docker image (-cgo tag postfix).
Type: string
# Examples
dsn: clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms&max_execution_time=60
dsn: foouser:foopassword@tcp(localhost:3306)/foodb
dsn: postgres://foouser:foopass@localhost:5432/foodb?sslmode=disable
dsn: oracle://foouser:foopass@localhost:1521/service_name
dsn: db_file.duckdb?threads=4&access_mode=READ_ONLY
dsn: ':memory:'
table
The table to query.
Type: string
# Examples
table: foo
columns
A list of columns to query.
Type: array
# Examples
columns:
- '*'
columns:
- foo
- bar
- baz
where
An optional where clause to add. Placeholder arguments are populated with the args_mapping field. Placeholders should always be question marks, and will automatically be converted to dollar syntax when the postgres or clickhouse drivers are used.
Type: string
# Examples
where: meow = ? and woof = ?
where: user_id = ?
args_mapping
An optional Bloblang mapping which should evaluate to an array of values matching in size to the number of placeholder arguments in the field where.
Type: string
# Examples
args_mapping: root = [ this.cat.meow, this.doc.woofs[0] ]
args_mapping: root = [ metadata("user.id").string() ]