# RedaSQL
![redasql](https://user-images.githubusercontent.com/4572217/138800787-b9525acd-8ab1-4f35-a762-948244b9caee.png)
RedaSQL is querying tool for redash.
I like `psql`(PostgreSQL CLI). so redasql resemble psql in some respects.
## Install
```bash
pip install redasql
```
## supported readsh version
RedaSQL supports Redash v8, v9 and v10.RedaSQL supports Redash v8, v9 and v10.
## How To Use
redasql need some arguments or environment variables.
redasql prioritizes arguments over environment variables.
| argument | env | mean | required |
|------------------|-------------------------|-------------------------------------------------------------------------------------------------------------|----------------------|
| -k/--api-key | REDASQL_REDASH_APIKEY | API KEY(user api key) | True |
| -s/--server-host | REDASQL_REDASH_ENDPOINT | Redash server hostname. ex) https://your.redash.server.host/ | True |
| -p/--proxy | REDASQL_HTTP_PROXY | if your redash server restricted by Proxy, set url format. ex)http://user:pass@your.proxy.server:proxy-port | False |
| -d/--data-source | None | initial connect datasource name. | False |
| --ignore-rc | None | ignore `.redasqlrc` file | False(default false) |
|--wait-interval-sec| None | Wait Job Pooling Interval Sec| False(default 0.1) |
|--timeout-count| None |Wait Job Pooling Count(int) | False(default 600) |
| --debug | None | debug mode | False(default false) |
if you want to use redasql with direnv, rename `.envrc.sample` to `.envrc` and set attributes.
### special commands
redasql has management commands.
```
metadata=# \?
\?: HELP META COMMANDS.
\q: EXIT.
\d: DESCRIBE TABLE
\c: SELECT DATASOURCE.
\x: QUERY RESULT TOGGLE PIVOT.
\f: CHANGE RESULT FORMATTER ['table', 'markdown', 'markdown_with_sql', 'csv'].
\l: LOAD QUERY FROM REDASH.
\o: CHANGE THE OUTPUT DESTINATION TO ['stdout', 'stdout_and_clipboard', 'file'].
\i: LOAD QUERY FROM LOCAL FILE.
```
### execute query
see below
#### start
```
$ redasql
____ _ ____ ___ _
| _ \ ___ __| | __ _/ ___| / _ \| |
| |_) / _ \/ _` |/ _` \___ \| | | | |
| _ < __/ (_| | (_| |___) | |_| | |___
|_| \_\___|\__,_|\__,_|____/ \__\_\_____|
- redash query cli tool -
SUCCESS CONNECT
- server version 8.0.0+b32245
- client version 0.1.0
(No DataSource)=#
```
#### connect datasource
use `\c data_source_name`. if not provide data_source_name, show all available data sources.
```
(No DataSource)=# \c metadata
metadata=#
```
#### describe table
use `\d table_name`. if not provide table_name, show all table names. if provide table_name with wildcard(\*), show describe matched tables.
```
metadata=# \d
access_permissions
alembic_version
:
queries
query_results
query_snippets
users
visualizations
widgets
metadata=# \d queries
## queries
- schedule
- updated_at
- api_key
- name
- id
- version
- is_draft
- query
- is_archived
- tags
- last_modified_by_id
- org_id
- options
- query_hash
- description
- latest_query_data_id
- search_vector
- data_source_id
- schedule_failures
- created_at
- user_id
metadata=# \d query_*
## query_results
- id
- data
- org_id
- query_hash
- data_source_id
- runtime
- query
- retrieved_at
## query_snippets
- updated_at
- id
- description
- created_at
- user_id
- trigger
- snippet
- org_id
```
#### execute query
enter your SQL and semicolon.
```bash
metadata=# select count(*) from queries;
+-------+
| count |
+-------+
| 3606 |
+-------+
1 row returned.
Time: 0.0159s
```
`\x` pivot result.
```
metadata=# \x
set pivoted [True]
metadata=# select id, user_id from queries limit 3;
-[RECORD 1]-------
id: 543
user_id: 40
-[RECORD 2]-------
id: 717
user_id: 40
-[RECORD 3]-------
id: 515
user_id: 38
3 rows returned.
Time: 0.0281s
```
### formats
redasql support many formats. `\f <format_name>` and `\x`
#### table format(default)
```
metadata=# select id, object_id, org_id, created_at from favorites limit 3;
+------+-------------+----------+--------------------------+
| id | object_id | org_id | created_at |
|------+-------------+----------+--------------------------|
| 2 | 513 | 1 | 2019-05-22T05:30:17.185Z |
| 3 | 514 | 1 | 2019-05-22T05:30:19.031Z |
| 4 | 230 | 1 | 2019-05-22T08:17:12.693Z |
+------+-------------+----------+--------------------------+
3 rows returned.
Time: 0.0219s
```
#### table format(pivoted)
```
metadata=# select id, object_id, org_id, created_at from favorites limit 3;
-[RECORD 1]----------
id| 2
object_id| 513
org_id| 1
created_at| 2019-05-22T05:30:17.185Z
-[RECORD 2]----------
id| 3
object_id| 514
org_id| 1
created_at| 2019-05-22T05:30:19.031Z
-[RECORD 3]----------
id| 4
object_id| 230
org_id| 1
created_at| 2019-05-22T08:17:12.693Z
3 rows returned.
Time: 0.0223s
```
#### markdown
```
metadata=# \f markdown
set formatter [markdown]
metadata=# select id, object_id, org_id, created_at from favorites limit 3;
| id | object_id | org_id | created_at |
|------|-------------|----------|--------------------------|
| 2 | 513 | 1 | 2019-05-22T05:30:17.185Z |
| 3 | 514 | 1 | 2019-05-22T05:30:19.031Z |
| 4 | 230 | 1 | 2019-05-22T08:17:12.693Z |
3 rows returned.
Time: 0.0207s
```
#### markdown(pivoted)
```
metadata=# select id, object_id, org_id, created_at from favorites limit 3;
| colum_name | value |
|--------------|--------------------------|
| created_at | 2019-05-22T05:30:17.185Z |
| org_id | 1 |
| id | 2 |
| object_id | 513 |
| ----- | ----- |
| created_at | 2019-05-22T05:30:19.031Z |
| org_id | 1 |
| id | 3 |
| object_id | 514 |
| ----- | ----- |
| created_at | 2019-05-22T08:17:12.693Z |
| org_id | 1 |
| id | 4 |
| object_id | 230 |
3 rows returned.
Time: 0.0106s
```
#### markdown_with_sql
```
```sql
select id, object_id, org_id, created_at from favorites limit 3;
``` .
| id | object_id | org_id | created_at |
|------|-------------|----------|--------------------------|
| 2 | 513 | 1 | 2019-05-22T05:30:17.185Z |
| 3 | 514 | 1 | 2019-05-22T05:30:19.031Z |
| 4 | 230 | 1 | 2019-05-22T08:17:12.693Z |
3 rows returned.
Time: 0.0253s
```
#### csv
```
metadata=# \f csv
set formatter [csv]
metadata=# select id, object_id, org_id, created_at from favorites limit 3;
id,object_id,org_id,created_at
2,513,1,2019-05-22T05:30:17.185Z
3,514,1,2019-05-22T05:30:19.031Z
4,230,1,2019-05-22T08:17:12.693Z
```
### change output type
#### stdout(default)
result to stdout only.
```
metadata=# \o stdout
set output [stdout]
```
#### stdout_with_clipboard
result to stdout and clipboard.
```
metadata=# \o stdout_and_clipboard
set output [stdout_and_clipboard]
```
#### file
result to stdout and File.
```
metadata=# \o file /tmp/result.txt
set output [file(/tmp/result.txt)]
```
### run sqlfile
`\i` run local sqlfile.
```
metadata=# \i test.sql
select count(*) from queries;
+---------+
| count |
|---------|
| 3876 |
+---------+
1 row returned.
Time: 0.018s
```
### quit
`ctrl + D` or `\q` quit redasql.
```
metadata=# \q
Sayonara!
```
### .redasqlrc
if you create `~/.redasqlrc`, redasql reads the file at startup and performs initial settings.
## Contribution
### run test
#### start up containers (redash, MySQL, postgresql)
unittest necessary redash test server. use docker-compose.yml in `./tests/docker/v{REDAHS_VERSION}`
- 8.0.2.b37747
- 9.0.0-beta.b49509
- 10.0.0.b50363
```bash
$ cd ./tests/docker/v8.0.2.b37747
$ docker-compose up -d
```
#### run test
```bash
$ python -m unittest discover -s tests/
```
Raw data
{
"_id": null,
"home_page": "https://github.com/denzow/redasql",
"name": "redasql",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": "redash, sql",
"author": "denzow",
"author_email": "denzow@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/40/c9/587996416adc161f01f1d184896c9f6f2f1065e4abe446b93176221c8361/redasql-2.7.2.tar.gz",
"platform": null,
"description": "# RedaSQL\n![redasql](https://user-images.githubusercontent.com/4572217/138800787-b9525acd-8ab1-4f35-a762-948244b9caee.png)\n\n\nRedaSQL is querying tool for redash.\nI like `psql`(PostgreSQL CLI). so redasql resemble psql in some respects.\n\n## Install\n\n```bash\npip install redasql\n```\n\n## supported readsh version\n\nRedaSQL supports Redash v8, v9 and v10.RedaSQL supports Redash v8, v9 and v10.\n\n## How To Use\n\nredasql need some arguments or environment variables.\nredasql prioritizes arguments over environment variables.\n\n\n| argument | env | mean | required |\n|------------------|-------------------------|-------------------------------------------------------------------------------------------------------------|----------------------|\n| -k/--api-key | REDASQL_REDASH_APIKEY | API KEY(user api key) | True |\n| -s/--server-host | REDASQL_REDASH_ENDPOINT | Redash server hostname. ex) https://your.redash.server.host/ | True |\n| -p/--proxy | REDASQL_HTTP_PROXY | if your redash server restricted by Proxy, set url format. ex)http://user:pass@your.proxy.server:proxy-port | False |\n| -d/--data-source | None | initial connect datasource name. | False |\n| --ignore-rc | None | ignore `.redasqlrc` file | False(default false) |\n|--wait-interval-sec| None | Wait Job Pooling Interval Sec| False(default 0.1) |\n|--timeout-count| None |Wait Job Pooling Count(int) | False(default 600) |\n| --debug | None | debug mode | False(default false) |\n\n\nif you want to use redasql with direnv, rename `.envrc.sample` to `.envrc` and set attributes.\n\n### special commands\n\nredasql has management commands.\n\n```\nmetadata=# \\?\n\\?: HELP META COMMANDS.\n\\q: EXIT.\n\\d: DESCRIBE TABLE\n\\c: SELECT DATASOURCE.\n\\x: QUERY RESULT TOGGLE PIVOT.\n\\f: CHANGE RESULT FORMATTER ['table', 'markdown', 'markdown_with_sql', 'csv'].\n\\l: LOAD QUERY FROM REDASH.\n\\o: CHANGE THE OUTPUT DESTINATION TO ['stdout', 'stdout_and_clipboard', 'file'].\n\\i: LOAD QUERY FROM LOCAL FILE.\n```\n\n### execute query\n\nsee below\n\n#### start\n```\n$ redasql\n\n ____ _ ____ ___ _ \n| _ \\ ___ __| | __ _/ ___| / _ \\| | \n| |_) / _ \\/ _` |/ _` \\___ \\| | | | | \n| _ < __/ (_| | (_| |___) | |_| | |___ \n|_| \\_\\___|\\__,_|\\__,_|____/ \\__\\_\\_____|\n\n - redash query cli tool -\n\nSUCCESS CONNECT\n- server version 8.0.0+b32245\n- client version 0.1.0\n\n(No DataSource)=#\n```\n\n#### connect datasource\n\nuse `\\c data_source_name`. if not provide data_source_name, show all available data sources. \n\n```\n(No DataSource)=# \\c metadata\nmetadata=#\n```\n\n#### describe table\n\nuse `\\d table_name`. if not provide table_name, show all table names. if provide table_name with wildcard(\\*), show describe matched tables.\n\n```\nmetadata=# \\d\naccess_permissions\nalembic_version\n:\nqueries\nquery_results\nquery_snippets\nusers\nvisualizations\nwidgets\nmetadata=# \\d queries\n## queries\n- schedule\n- updated_at\n- api_key\n- name\n- id\n- version\n- is_draft\n- query\n- is_archived\n- tags\n- last_modified_by_id\n- org_id\n- options\n- query_hash\n- description\n- latest_query_data_id\n- search_vector\n- data_source_id\n- schedule_failures\n- created_at\n- user_id\nmetadata=# \\d query_*\n## query_results\n- id\n- data\n- org_id\n- query_hash\n- data_source_id\n- runtime\n- query\n- retrieved_at\n## query_snippets\n- updated_at\n- id\n- description\n- created_at\n- user_id\n- trigger\n- snippet\n- org_id\n\n```\n\n#### execute query\n\nenter your SQL and semicolon.\n\n```bash\nmetadata=# select count(*) from queries;\n+-------+\n| count |\n+-------+\n| 3606 |\n+-------+\n\n1 row returned.\nTime: 0.0159s\n\n```\n\n`\\x` pivot result.\n\n\n\n```\nmetadata=# \\x\nset pivoted [True]\n\nmetadata=# select id, user_id from queries limit 3;\n-[RECORD 1]-------\n id: 543\nuser_id: 40\n-[RECORD 2]-------\n id: 717\nuser_id: 40\n-[RECORD 3]-------\n id: 515\nuser_id: 38\n\n\n3 rows returned.\nTime: 0.0281s\n\n```\n\n### formats\n\nredasql support many formats. `\\f <format_name>` and `\\x`\n\n\n\n#### table format(default)\n\n```\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n+------+-------------+----------+--------------------------+\n| id | object_id | org_id | created_at |\n|------+-------------+----------+--------------------------|\n| 2 | 513 | 1 | 2019-05-22T05:30:17.185Z |\n| 3 | 514 | 1 | 2019-05-22T05:30:19.031Z |\n| 4 | 230 | 1 | 2019-05-22T08:17:12.693Z |\n+------+-------------+----------+--------------------------+\n\n3 rows returned.\nTime: 0.0219s\n```\n\n#### table format(pivoted)\n\n```\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n-[RECORD 1]----------\n id| 2\n object_id| 513\n org_id| 1\ncreated_at| 2019-05-22T05:30:17.185Z\n-[RECORD 2]----------\n id| 3\n object_id| 514\n org_id| 1\ncreated_at| 2019-05-22T05:30:19.031Z\n-[RECORD 3]----------\n id| 4\n object_id| 230\n org_id| 1\ncreated_at| 2019-05-22T08:17:12.693Z\n\n\n3 rows returned.\nTime: 0.0223s\n\n```\n\n#### markdown\n\n```\nmetadata=# \\f markdown\nset formatter [markdown]\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n| id | object_id | org_id | created_at |\n|------|-------------|----------|--------------------------|\n| 2 | 513 | 1 | 2019-05-22T05:30:17.185Z |\n| 3 | 514 | 1 | 2019-05-22T05:30:19.031Z |\n| 4 | 230 | 1 | 2019-05-22T08:17:12.693Z |\n\n3 rows returned.\nTime: 0.0207s\n\n```\n\n#### markdown(pivoted)\n\n\n```\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n| colum_name | value |\n|--------------|--------------------------|\n| created_at | 2019-05-22T05:30:17.185Z |\n| org_id | 1 |\n| id | 2 |\n| object_id | 513 |\n| ----- | ----- |\n| created_at | 2019-05-22T05:30:19.031Z |\n| org_id | 1 |\n| id | 3 |\n| object_id | 514 |\n| ----- | ----- |\n| created_at | 2019-05-22T08:17:12.693Z |\n| org_id | 1 |\n| id | 4 |\n| object_id | 230 |\n\n3 rows returned.\nTime: 0.0106s\n```\n\n#### markdown_with_sql\n\n```\n```sql\nselect id, object_id, org_id, created_at from favorites limit 3;\n``` .\n\n| id | object_id | org_id | created_at |\n|------|-------------|----------|--------------------------|\n| 2 | 513 | 1 | 2019-05-22T05:30:17.185Z |\n| 3 | 514 | 1 | 2019-05-22T05:30:19.031Z |\n| 4 | 230 | 1 | 2019-05-22T08:17:12.693Z |\n\n3 rows returned.\nTime: 0.0253s\n\n\n```\n\n#### csv\n\n```\nmetadata=# \\f csv\nset formatter [csv]\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\nid,object_id,org_id,created_at\n2,513,1,2019-05-22T05:30:17.185Z\n3,514,1,2019-05-22T05:30:19.031Z\n4,230,1,2019-05-22T08:17:12.693Z\n\n```\n\n### change output type\n\n#### stdout(default)\n\nresult to stdout only.\n\n```\nmetadata=# \\o stdout\nset output [stdout]\n```\n\n#### stdout_with_clipboard\n\nresult to stdout and clipboard.\n\n```\nmetadata=# \\o stdout_and_clipboard\nset output [stdout_and_clipboard]\n```\n\n#### file\n\nresult to stdout and File.\n\n```\nmetadata=# \\o file /tmp/result.txt\nset output [file(/tmp/result.txt)]\n```\n\n\n### run sqlfile\n\n`\\i` run local sqlfile.\n\n```\nmetadata=# \\i test.sql\nselect count(*) from queries;\n\n+---------+\n| count |\n|---------|\n| 3876 |\n+---------+\n\n1 row returned.\nTime: 0.018s\n\n```\n\n### quit\n\n`ctrl + D` or `\\q` quit redasql.\n\n```\nmetadata=# \\q \nSayonara!\n```\n\n### .redasqlrc\n\nif you create `~/.redasqlrc`, redasql reads the file at startup and performs initial settings.\n\n\n## Contribution\n\n### run test\n\n#### start up containers (redash, MySQL, postgresql)\n\nunittest necessary redash test server. use docker-compose.yml in `./tests/docker/v{REDAHS_VERSION}`\n\n - 8.0.2.b37747\n - 9.0.0-beta.b49509\n - 10.0.0.b50363\n\n```bash\n$ cd ./tests/docker/v8.0.2.b37747\n$ docker-compose up -d\n```\n\n#### run test\n\n```bash\n$ python -m unittest discover -s tests/\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": null,
"version": "2.7.2",
"project_urls": {
"Homepage": "https://github.com/denzow/redasql",
"Repository": "https://github.com/denzow/redasql"
},
"split_keywords": [
"redash",
" sql"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1381a16717247a60e47a3b278051bee55bed26fb6984f88dd31f972f5e16968d",
"md5": "7b9c8e633202c227ae024c43531b2dcc",
"sha256": "c09fd0d1c3caa1109ba88415573fb865608eb8b846aa7717a7935cd30a6ecf83"
},
"downloads": -1,
"filename": "redasql-2.7.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7b9c8e633202c227ae024c43531b2dcc",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 22805,
"upload_time": "2024-11-22T01:42:50",
"upload_time_iso_8601": "2024-11-22T01:42:50.463191Z",
"url": "https://files.pythonhosted.org/packages/13/81/a16717247a60e47a3b278051bee55bed26fb6984f88dd31f972f5e16968d/redasql-2.7.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "40c9587996416adc161f01f1d184896c9f6f2f1065e4abe446b93176221c8361",
"md5": "1234f7666142b77bd00eb058c7ea6fcb",
"sha256": "fda78b2a0a5e54bb6140a33b6466edf2a0fc3323aebb829933b5c9f8a988beba"
},
"downloads": -1,
"filename": "redasql-2.7.2.tar.gz",
"has_sig": false,
"md5_digest": "1234f7666142b77bd00eb058c7ea6fcb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 20971,
"upload_time": "2024-11-22T01:42:52",
"upload_time_iso_8601": "2024-11-22T01:42:52.358646Z",
"url": "https://files.pythonhosted.org/packages/40/c9/587996416adc161f01f1d184896c9f6f2f1065e4abe446b93176221c8361/redasql-2.7.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-22 01:42:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "denzow",
"github_project": "redasql",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "redasql"
}