8000 GitHub - firebolt-db/fb-cli: Firebolt CLI & REPL
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

firebolt-db/fb-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fb-cli

Firebolt CLI; work with Firebolt and Firebolt Core.

Examples

➤  fb select 42
 ?column?
---------
       42

Time: 41.051ms

REPL

➤  fb
=> select 42
 ?column?
---------
       42

Time: 40.117ms

=> create table t (a int);
Table 't' already exists.

Time: 87.747ms

=> insert into t select * from generate_series(1, 100000000);
/

Also support history + search in it (CTRL+R).

Help

➤ fb --help
Usage: fb [OPTIONS]

Positional arguments:
  query                    Query command(s) to execute. If not specified, starts the REPL

Optional arguments:
  -c, --command COMMAND    Run a single command and exit
  -C, --core               Preset of settings to connect to Firebolt Core
  -h, --host HOSTNAME      Hostname (and port) to connect to
  -d, --database DATABASE  Database name to use
  -f, --format FORMAT      Output format (e.g., TabSeparatedWithNames, PSQL, JSONLines_Compact, Vertical, ...)
  -e, --extra EXTRA        Extra settings in the form --extra <name>=<value>
  -l, --label LABEL        Query label for tracking or identification
  -j, --jwt JWT            JWT for authentication
  --sa-id SA-ID            Service Account ID for OAuth authentication
  --sa-secret SA-SECRET    Service Account Secret for OAuth authentication
  --jwt-from-file          Load JWT from file (~/.firebolt/jwt)
  --bearer BEARER          Firebolt bearer token for authentication
  --oauth-env OAUTH-ENV    OAuth environment to use (e.g., 'app' or 'staging'). Used for Service Account authentication (default: staging)
  -v, --verbose            Enable extra verbose output
  --concise                Suppress time statistics in output
  --hide-pii               Hide URLs that may cont
8000
ain PII in query parameters
  --no-spinner             Disable the spinner in CLI output
  --update-defaults        Update default configuration values
  -V, --version            Print version
  --help                   Show help message and exit

Install

  1. Install cargo: https://doc.rust-lang.org/cargo/getting-started/installation.html
    1. Add source "$HOME/.cargo/env" to your ~/.bashrc (or ~/.zshrc).
  2. Install pkg-config: sudo apt install pkg-config (a default dependency for Ubuntu)
  3. Install openssl: sudo apt install libssl-dev (a default dependency for Ubuntu)
  4. Clone & Build & Install:
git clone git@github.com:firebolt-db/fb-cli.git
cd fb-cli
cargo install --path . --locked
  1. That's it: you should be able to run fb // or at least ~/.cargo/bin/fb if cargo env isn't caught up.

Shortcuts

Most of them from https://github.com/kkawakam/rustyline:

Keystroke Action
Enter Finish the line entry
Ctrl-R Reverse Search history (Ctrl-S forward, Ctrl-G cancel)
Ctrl-U Delete from start of line to cursor
Ctrl-W Delete word leading up to cursor (using white space as a word boundary)
Ctrl-Y Paste from Yank buffer
Ctrl-_ Undo

Some of them specific to fb:

Keystroke Action
Ctrl-C Cancel current input.
Ctrl-O Insert a newline

Defaults

Can update defaults one and for all by specifying --update-defaults: during this application old defaults are not applied.

New defaults are going to be stored at ~/.firebolt/fb_config.

~ ➤  fb select 42
 ?column?
---------
       42

Time: 40.342ms

~ ➤  fb select 42 --format CSVWithNames --concise --update-defaults
"?column?"
42

~ ➤  fb select 42
"?column?"
42

~ ➤  fb select 42 --verbose # defauls are merged with new args
URL: http://localhost:8123/?database=local_dev_db&mask_internal_errors=1
QUERY: select 42
"?column?"
42

Queries against FB 2.0 using Service Account

Specify:

  • Service Account ID;
  • Service Account Secret;
  • Environment

Note: The token is saved in ~/.firebolt/fb_sa_token/ and will be reused if the account ID and secret match and the token is less than half an hour old.

➤  fb --sa-id=${SA_ID} --sa-secret=${SA_SECRET} --oauth-env=app \
  -h ${ACCOUNT_ID}.api.us-east-1.app.firebolt.io -d ${DATABASE_NAME}

Read more about getting service accounts here.

Queries against FB 2.0

Specify:

  • host;
  • account_id;
  • bearer token (take it from browser);
➤  fb --host api.us-east-1.app.firebolt.io --verbose --extra account_id=12312312312 --bearer 'eyJhbGciOiJSUzI1NiI...'

=> show engines
URL: https://api.us-east-1.app.firebolt.io/?database=db_1&account_id=12312312&output_format=JSON&advanced_mode=1
QUERY: show engines
┌─engine_name─────────────┬─engine_owner────────────────┬─type─┬─nodes─┬─clusters─┬─status───────────────┬─auto_start─┬─auto_stop─┬─initially_stopped─┬─url────────────────────────────────────────────────────────────────────────────────────────────────────┬─default_database───────────────────┬─version─┬─last_started──────────────────┬─last_stopped──────────────────┬─description─┐
│ pre_demo_engine1        │ user@firebolt.io            │ S    │     2 │        1 │ ENGINE_STATE_STOPPED │          t │        20 │                 f │ api.us-east-1.app.firebolt.io?account_id=1321231&engine=pre_demo_engine1                               │                                    │ latest  │ 2024-02-07 01:19:19.81689+00  │ 2024-02-07 01:44:15.930845+00 │             │
│ pre_demo_engine2        │ user@firebolt.io            │ S    │     2 │        1 │ ENGINE_STATE_STOPPED │          t │        20 │                 f │ api.us-east-1.app.firebolt.io?account_id=1321231&engine=pre_demo_engine2                               │        pre_demo_validation_testdb1 │ latest  │ 2024-02-07 01:21:36.274962+00 │ 2024-02-07 02:32:05.403539+00 │             │
└─────────────────────────┴─────────────────────────────┴──────┴───────┴──────────┴──────────────────────┴────────────┴───────────┴───────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────┴─────────┴───────────────────────────────┴───────────────────────────────┴─────────────┘

=> set engine=user5_engine_1
URL: https://api.us-east-1.app.firebolt.io/?database=db_1&engine=user5_engine_1&account_id=1321231&output_format=JSON&advanced_mode=1

=> select 42
URL: https://api.us-east-1.app.firebolt.io/?database=db_1&engine=user5_engine_1&account_id=1321231&output_format=JSON&advanced_mode=1
QUERY: select 42
 ?column?
---------
       42

Time: 275.639ms

Set and Unset

In interactive mode one can dynamically update extra arguments:

  • set key=value; to set the argument;
  • unset key; to unset it.
=> select E'qqq';
URL: http://localhost:8123/?database=local_dev_db
QUERY: select E'qqq';
 ?column?
---------
      qqq

Time: 40.745ms

=> set format = Vertical;
=> select E'qqq';
URL: http://localhost:8123/?database=local_dev_db
QUERY: select E'qqq';
Row 1:
──────
?column?: qqq

Time: 38.888ms

=> set cool_mode=disabled;
=> select E'qqq';
URL: http://localhost:8123/?database=local_dev_db&cool_mode=disabled
QUERY: select E'qqq';
Unknown setting cool_mode

Time: 36.802ms

=> unset cool_mode
=> select E'qqq';
URL: http://localhost:8123/?database=local_dev_db
QUERY: select E'qqq';
Row 1:
──────
?column?: qqq

Time: 39.395ms

=> set enable_result_cache=disabled;
=> select E'qqq';
URL: http://localhost:8123/?database=local_dev_db&enable_result_cache=disabled
QUERY: select E'qqq';
Row 1:
──────
qqq: qqq

Time: 41.671ms

=> unset enable_result_cache;
=> select E'qqq';
URL: http://localhost:8123/?database=local_dev_db
QUERY: select E'qqq';
Row 1:
──────
?column?: qqq

Time: 39.453ms

=> 

License

See LICENSE.

About

Firebolt CLI & REPL

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages

0