Skip to main content

BendSQL

BendSQL is a command line tool that has been designed specifically for Databend. It allows users to establish a connection with Databend and execute queries directly from a CLI window.

This tool is particularly useful for those who prefer a command line interface and need to work with Databend on a regular basis. With BendSQL, users can easily and efficiently manage their databases, tables, and data, and perform a wide range of queries and operations with ease.

Downloading and Installing BendSQL

To download and install BendSQL, kindly visit the BendSQL release page on GitHub.

Connecting to Databend

Use bendsql to connect to a Databend instance:

> bendsql --help
Databend Native Command Line Tool

Usage: bendsql [OPTIONS]

Options:
--help Print help information
--flight Using flight sql protocol
--tls Enable TLS
-h, --host <HOST> Databend Server host, Default: 127.0.0.1
-P, --port <PORT> Databend Server port, Default: 8000
-u, --user <USER> Default: root
-p, --password <PASSWORD> [env: BENDSQL_PASSWORD=]
-D, --database <DATABASE> Database name
--set <SET> Settings
--dsn <DSN> Data source name [env: BENDSQL_DSN=]
-n, --non-interactive Force non-interactive mode
-q, --query <QUERY> Query to execute
-d, --data <DATA> Data to load, @file or @- for stdin
-f, --format <FORMAT> Data format to load [default: csv] [possible values: csv, tsv, ndjson, parquet, xml]
--format-opt <FORMAT_OPT> Data format options
-o, --output <OUTPUT> Output format [default: table] [possible values: table, csv, tsv]
--progress Show progress for data loading in stderr
-V, --version Print version

To connect to a local Databend, simply run bendsql:

> bendsql
Welcome to BendSQL.
Trying connect to localhost:8000 as user root.
Connected to DatabendQuery v1.1.2-nightly-8ade21e4669e0a2cc100615247705feacdf76c5b(rust-1.70.0-nightly-2023-04-15T16:08:52.195357424Z)

To connect to Databend Cloud, it is recommended to use the --dsn option or the BENDSQL_DSN environment variable:

> export BENDSQL_DSN="databend://cloudapp:password@tnxxx.gw.aws-us-east-2.default.databend.com/?warehouse=default

> bendsql
Welcome to BendSQL.
Trying connect to tnxxx.gw.aws-us-east-2.default.datafusecloud.com:443 as user cloudapp.
Connected to DatabendQuery v1.1.17-nightly-77286d52c6d6db2c2000a74febf4ddb25f910c41(rust-1.70.0-nightly-2023-04-24T04:38:16.901421116Z)

cloudapp@tnxxx.gw>

Running Queries with BendSQL

Query with interactive shell

> bendsql
Welcome to BendSQL.
Trying connect to localhost:8000 as user root.
Connected to DatabendQuery v1.1.2-nightly-8ade21e4669e0a2cc100615247705feacdf76c5b(rust-1.70.0-nightly-2023-04-15T16:08:52.195357424Z)

root@localhost> select now();

SELECT
NOW()

┌────────────────────────────┐
│ now()
│ Timestamp │
├────────────────────────────┤
2023-04-25 07:09:41.281690 │
└────────────────────────────┘

1 row in 0.018 sec. Processed 1 rows, 1B (54.96 rows/s, 54B/s)
(1 row)

Query non-interactive

with argument:

> bendsql --query "select now()"
┌────────────────────────────┐
│ now()
│ Timestamp │
├────────────────────────────┤
2023-04-25 07:12:31.552631 │
└────────────────────────────┘

with stdin:

> echo "select now();" | bendsql
┌────────────────────────────┐
│ now()
│ Timestamp │
├────────────────────────────┤
2023-04-25 07:12:55.602754 │
└────────────────────────────┘

Loading data

from stdin:

> bendsql --query='INSERT INTO test_books VALUES;' --format=csv --data=@- <books.csv

from file:

> bendsql \
--query='INSERT INTO ontime VALUES;' \
--format=csv \
--format-opt="compression=gzip" \
--format-opt="skip_header=1" \
--set="presigned_url_disabled=1" \
--data=@ontime.csv.gz
note

presigned_url_disabled=1 would instruct BendSQL to load data directly using upload_to_stage api, which would result in additional transfer fee as well as lower performance, and is not recommended for production use.