From 6e5c468a1ba4827ca4082ad667bb7a44b8f4b92d Mon Sep 17 00:00:00 2001 From: "J.C. Zhong" Date: Mon, 20 Mar 2023 13:21:45 -0700 Subject: [PATCH 1/3] docs: update the step by step guide of connecting to a query engine --- .../setup_guide/connect_to_a_query_engine.md | 133 ++++++++++++++++++ docs_website/docs/setup_guide/helm_guide.md | 2 +- ...t_to_query_engines.md => query_engines.md} | 47 +------ docs_website/sidebars.json | 3 +- .../img/documentation/Querybook_concepts.png | Bin 0 -> 102382 bytes 5 files changed, 141 insertions(+), 44 deletions(-) create mode 100644 docs_website/docs/setup_guide/connect_to_a_query_engine.md rename docs_website/docs/setup_guide/{connect_to_query_engines.md => query_engines.md} (76%) create mode 100644 docs_website/static/img/documentation/Querybook_concepts.png diff --git a/docs_website/docs/setup_guide/connect_to_a_query_engine.md b/docs_website/docs/setup_guide/connect_to_a_query_engine.md new file mode 100644 index 000000000..0d6422bee --- /dev/null +++ b/docs_website/docs/setup_guide/connect_to_a_query_engine.md @@ -0,0 +1,133 @@ +--- +id: connect_to_a_query_engine +title: Connect to a Query Engine +sidebar_label: Connect to a Query Engine +--- + +## Concepts + +Before going through the setup steps, let's get familiar with some concepts of Querybook. + +**Metastore** + +Metastores are used to store metadata for tables, such as table schemas, table and column descriptions, tags, ownership, and more. They differ from actual databases that store table data. For example, in the Hive metastore, the actual data may be stored on S3. In SqlAlchemy compatible databases like MySQL and PostgreSQL, metadata and data are stored in the same database. + +:::info +Metastore is optional when executing a query. However, it provides several benefits, such as the ability to know which tables you can query and other metadata about the table, including schema, description, tags, ownership, and more. It also provides auto-completion support. +::: + +**Query Engine** + +Query engines execute queries on data sources and return results in a structured format, such as Presto. + +**Environment** + +Environments are used for access control and scoped workspaces. + +![](/img/documentation/Querybook_concepts.png) + +- A query engine can be associated with a metastore. +- An environment can contain multiple query engines. +- A user can be added to one or many environments, depending on the data source(s) they are granted access to and the environment(s) that have access. + +Therefore, the general process of adding a query engine is: + +1. Create a new query engine associated with the metastore. +2. Add the query engine to an environment or create a new environment first if necessary. +3. [**Optional but highly recommended**] Create a new metastore for the data source if it does not already exist. + +## Prerequisites + +- Have the Querybook repository cloned. +- Have a PostgreSQL database ready to connect. It could be either on your localhost or on a remote server. + +## Step by Step + +Here we'll guide you through the process of adding a query engine for **PostgreSQL** in Querybook. + +1. Create a `local.txt` file under the `requirements/` folder in the project's root directory. + +```bash +touch requirements/local.txt +``` + +2. Check the [engine list](https://www.querybook.org/docs/setup_guide/connect_to_query_engines#all-query-engines) and find the package it depends on. +3. If the required package is not included by default, add it to the `local.txt` file. For `PostgreSQL`, no additional package is needed. Here is an example for `Amazon Redshift`: + +```bash +echo -e "sqlalchemy-redshift\nredshift_connector" > requirements/local.txt +``` + +4. Start the container: + +```bash +make +``` + +5. Open [http://localhost:10001](http://localhost:10001) +6. Sign up as a new user and use the demo setup. The first signed up user will be added as the admin. +7. Open the admin tool [http://localhost:10001/admin](http://localhost:10001/admin) +8. Click `Query Engine` to add a new query engine + + - Provide a name for the query engine. + - Select `Postgresql` as the language. + - Select `sqlalchemy` as the executor. + - Input the connection string, which should look like + ``` + postgresql://:@:/ + ``` + Please refer to the SqlAlchemy [documentation](https://docs.sqlalchemy.org/en/20/core/engines.html#postgresql) for the connection string format. + - Select `ConnectionChecker` as status checker + + :::caution About localhost + + If Querybook and PostgresSQL are both running on the same machine, you'll need some extra change. + + **Mac** + + Please use `host.docker.internal` instead of `localhost` as the server address. e.g. `postgresql://:@host.docker.internal:5432/` + + **Linux** + + Before step 4 `make` + + - update `docker-compose.yml` to add `network_mode=host` for below services + - web + - worker + - scheduler + - update `containers/bundled_querybook_config.yaml` to use `localhost` instead of service names + + ```yaml + DATABASE_CONN: mysql+pymysql://test:passw0rd@localhost:3306/querybook2?charset=utf8mb4 + REDIS_URL: redis://localhost:6379/0 + ELASTICSEARCH_HOST: localhost:9200 + ``` + + Then keep using `localhost` as the server host in the connection string + ::: + +9. Click `Test Connection` to see if it can connect to the database correctly. If it fails, go back and check the settings above and ensure that the database server is ready for connection. You can use command-line tools like `psql` to try to connect with the same connection settings. +10. Click `Save` to create the engine. +11. Go to the `Environment` tab and select `demo_environment`. You can also create a new environment if you like. +12. For `Query Engines`, select `postgresql` from the dropdown list, and click `Add Query Engine`. +13. Open [http://localhost:10001/demo_environment/adhoc/](http://localhost:10001/demo_environment/adhoc/). Switch to the new environment if you created a new one in step 11. +14. Try to write a test query, select `postgresql`, and run it. + +**That's it 🎉. Keep reading if you'd like to know how to add a metastore.** + +15. Open [http://localhost:10001/admin/metastore/](http://localhost:10001/admin/metastore/) +16. Create a new metastore. + - Provide a name for the metastore. + - Select `SqlAlchemyMetastoreLoader` as the loader. + - Input the same connection string as the query engine. + :::info Connection String + For PostgreSQL, the metastore is the same as the database, so we're using the same connection string for both the metastore and query engine. However, this may not be the case for other engines, such as Hive Metastore + Presto. + ::: +17. Click `Create` to create the metastore. +18. On the same page, you will see a section called `Update Schedule`. Click the button `Create Task`. This scheduled task is used for syncing the metadata from the metastore to Querybook periodically. +19. Click `Run Task` and wait until it completes. +20. Go to the `Query Engine` tab and select the new query engine `postgresql`. +21. Select `postgres_metastore` from the dropdown list for the `Metastore` field and click `Save`. +22. Go to the `Tables` tab on page [http://localhost:10001/demo_environment/](http://localhost:10001/admin/metastore/). Select `postgres_metastore` from the dropdown list. You'll see the tables synced from the metastore. If you don't see any tables, go back to step 17 and check if the connection string is correct. + +Congratulations! You have successfully set up Querybook with a query engine and a metastore. You can now start exploring and analyzing your data with ease. diff --git a/docs_website/docs/setup_guide/helm_guide.md b/docs_website/docs/setup_guide/helm_guide.md index 554935ed7..dbc61d83b 100644 --- a/docs_website/docs/setup_guide/helm_guide.md +++ b/docs_website/docs/setup_guide/helm_guide.md @@ -1,5 +1,5 @@ --- -id: helm_deployment_guide +id: helm_guide title: Helm Deployment Guide sidebar_label: Helm Deployment Guide --- diff --git a/docs_website/docs/setup_guide/connect_to_query_engines.md b/docs_website/docs/setup_guide/query_engines.md similarity index 76% rename from docs_website/docs/setup_guide/connect_to_query_engines.md rename to docs_website/docs/setup_guide/query_engines.md index 22b93f739..15044fb48 100644 --- a/docs_website/docs/setup_guide/connect_to_query_engines.md +++ b/docs_website/docs/setup_guide/query_engines.md @@ -1,7 +1,7 @@ --- -id: connect_to_query_engines -title: Connect to Query Engines -sidebar_label: Connect to Query Engines +id: query_engines +title: Query Engines +sidebar_label: Query Engines --- ## Overview @@ -30,48 +30,11 @@ If you have tried any of the tier 3 databases and confirmed it works, please upd ## Query Engine Support -Querybook only supports a few of the Tier 1 & 2 databases by default. When Querybook is launched, it checks with SqlAlchemy to see if any of the databases below are available. If so, the query engine would be automatically available to set up in the Admin UI. Please see the [step by step guide](#step-by-step-guide) below to see an working example. - -## Step by step guide - -In this guide, we will go through adding Amazon Redshift query engine to Querybook. This serves as an example to adding all sqlalchemy-compatible query engines. - -1. Clone and download the repo - -```sh -git clone git@github.com:pinterest/querybook.git -cd querybook -``` - -2. Create a `local.txt` under `requirements/` folder in the project's root directory - -```sh -touch requirements/local.txt -``` - -3. Add the required packages - -```sh -echo -e "sqlalchemy-redshift\nredshift_connector" > requirements/local.txt -``` - -4. Start the container - -```sh -make -``` - -5. Register as a new user and use the demo setup. -6. Visit [https://localhost:10001/admin/query_engine/](https://localhost:10001/admin/query_engine/) and create a new query engine. Put `redshift` as the language and `generic-sqlalchemy` as the executor. In the `Executor Params`, put the connection string (as specified by SqlAlchemy) in the `Connection_string` field. -7. Go to [https://localhost:10001/admin/environment/1/](https://localhost:10001/admin/environment/1/) and add the Redshift engine under the demo_environment. -8. Now you can run queries against the new Redshift engine in [https://localhost:10001/demo_environment/adhoc/](https://localhost:10001/demo_environment/adhoc/). -9. To include table metadata and autocompletion, you would need to add a metastore. Visit [https://localhost:10001/admin/metastore/](https://localhost:10001/admin/metastore/) and create a new metastore. Use SqlAlchemyMetastoreLoader with the exact connection string used for the query engine. Click on `Save` -> `CREATE SCHEDULE` -> `Create Task`. Now click on `Run Task` to sync. You can view the progress in the `History` tab. Wait until it is completed (Should be done in seconds if the number of tables is small). -10. Go to your query engine page on [https://localhost:10001/admin/query_engine/](https://localhost:10001/admin/query_engine/), in the Metastore field, choose the metastore you just created and click `Save`. -11. Visit [https://localhost:10001/demo_environment/adhoc/](https://localhost:10001/demo_environment/adhoc/) again and the auto complete feature should be available. You can also view all tables by clicking on the `Tables` button on the left sidebar and select the specific metastore. +Querybook only supports a few of the Tier 1 & 2 databases by default. When Querybook is launched, it checks with SqlAlchemy to see if any of the databases below are available. If so, the query engine would be automatically available to set up in the Admin UI. ## All Query Engines -**Note**: If the query engine is not included below, but it does have a Sqlalchemy integration, you can still use it in Querybook. Follow the [step by step guide](#step-by-step-guide) with 1 additional step before step 4. Visit `/querybook/server/lib/query_executor/sqlalchemy.py` and add the query engine to the list variable `SQLALCHEMY_SUPPORTED_DIALECTS`, and continue to step 4. If it works, please contribute to Querybook by submitting a PR of your changes. +**Note**: If the query engine is not included below, but it does have a Sqlalchemy integration, you can still use it in Querybook. Follow the [Connect to a Query Engine](./connect_to_a_query_engine) with 1 additional step before step 4. Visit `/querybook/server/lib/query_executor/sqlalchemy.py` and add the query engine to the list variable `SQLALCHEMY_SUPPORTED_DIALECTS`, and continue to step 4. If it works, please contribute to Querybook by submitting a PR of your changes. | Query Engine | Tier | Package | | -------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | diff --git a/docs_website/sidebars.json b/docs_website/sidebars.json index e3954fa96..3618dd62c 100755 --- a/docs_website/sidebars.json +++ b/docs_website/sidebars.json @@ -9,7 +9,8 @@ "setup_guide/setup_overview", "setup_guide/quick_setup", "setup_guide/troubleshoot", - "setup_guide/connect_to_query_engines", + "setup_guide/connect_to_a_query_engine", + "setup_guide/query_engines", "setup_guide/prod_setup", "setup_guide/deployment_guide", "setup_guide/helm_guide", diff --git a/docs_website/static/img/documentation/Querybook_concepts.png b/docs_website/static/img/documentation/Querybook_concepts.png new file mode 100644 index 0000000000000000000000000000000000000000..de692cb545b2b068ebaded49f1fdfc5d838835fc GIT binary patch literal 102382 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

UanpWl#)d>l& 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 g-v;^rbEFrr9SEbvEJK|{V$)-?G40PKn5TmS$7 literal 0 HcmV?d00001 From 0c3a6dd386123dda7c2a44addd1bd035e9a96cf1 Mon Sep 17 00:00:00 2001 From: "J.C. Zhong" Date: Mon, 20 Mar 2023 16:30:17 -0700 Subject: [PATCH 2/3] link to general config --- .../docs/configurations/general_config.md | 8 +++- .../setup_guide/connect_to_a_query_engine.md | 40 +++++-------------- 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/docs_website/docs/configurations/general_config.md b/docs_website/docs/configurations/general_config.md index 6ef04350b..0ef8d3c76 100644 --- a/docs_website/docs/configurations/general_config.md +++ b/docs_website/docs/configurations/general_config.md @@ -16,7 +16,7 @@ In the next section we will go over different things that can be configured in t Checkout [Sharing & Security](../overview/sharing_and_security.md) to learn how to configure access permission for these entities. ::: -#### Environment +### Environment Environment ensures users on Querybook are only allowed to access to information/query they have permission to. All DataDocs, Query Engines are attached to some environments. @@ -44,6 +44,12 @@ Once a metastore is created, you can configure the auto sync schedule, manually Query engine configures the endpoints that users can query. Each query engine needs to be attached to an environment for security measures. They can also attach a metastore to allow users to see table information while writing queries. All available query engine executors are grouped by language and each of them have different configuration values that needs to be set. +![](/img/documentation/Querybook_concepts.png) + +- A query engine can be associated with a metastore. +- An environment can contain multiple query engines. +- A user can be added to one or many environments, depending on the data source(s) they are granted access to and the environment(s) that have access. + ### Announcement Querybook Admins can use the announcement feature to send quick updates to users on Querybook.The announcement will appear as a top banner on Querybook's main site. Querybook actively polls the announcement end point five minutes so any change to the announcements are quickly reflected. diff --git a/docs_website/docs/setup_guide/connect_to_a_query_engine.md b/docs_website/docs/setup_guide/connect_to_a_query_engine.md index 0d6422bee..2f516cd32 100644 --- a/docs_website/docs/setup_guide/connect_to_a_query_engine.md +++ b/docs_website/docs/setup_guide/connect_to_a_query_engine.md @@ -4,46 +4,24 @@ title: Connect to a Query Engine sidebar_label: Connect to a Query Engine --- -## Concepts +## Prerequisites -Before going through the setup steps, let's get familiar with some concepts of Querybook. +- Have the Querybook repository cloned. +- Have a PostgreSQL database ready to connect. It could be either on your localhost or on a remote server. -**Metastore** +## General Process -Metastores are used to store metadata for tables, such as table schemas, table and column descriptions, tags, ownership, and more. They differ from actual databases that store table data. For example, in the Hive metastore, the actual data may be stored on S3. In SqlAlchemy compatible databases like MySQL and PostgreSQL, metadata and data are stored in the same database. +1. Create a query engine for query execution. +2. Add the query engine to an environment. Create one first if needed. +3. **[Optional but highly recommended]** Create a new metastore to associate with the query engine. :::info -Metastore is optional when executing a query. However, it provides several benefits, such as the ability to know which tables you can query and other metadata about the table, including schema, description, tags, ownership, and more. It also provides auto-completion support. +If dont have an idea of above concepts of **query engine**, **environment** and **metastore**, please refer to [here](../configurations/general_config#environment) ::: -**Query Engine** - -Query engines execute queries on data sources and return results in a structured format, such as Presto. - -**Environment** - -Environments are used for access control and scoped workspaces. - -![](/img/documentation/Querybook_concepts.png) - -- A query engine can be associated with a metastore. -- An environment can contain multiple query engines. -- A user can be added to one or many environments, depending on the data source(s) they are granted access to and the environment(s) that have access. - -Therefore, the general process of adding a query engine is: - -1. Create a new query engine associated with the metastore. -2. Add the query engine to an environment or create a new environment first if necessary. -3. [**Optional but highly recommended**] Create a new metastore for the data source if it does not already exist. - -## Prerequisites - -- Have the Querybook repository cloned. -- Have a PostgreSQL database ready to connect. It could be either on your localhost or on a remote server. - ## Step by Step -Here we'll guide you through the process of adding a query engine for **PostgreSQL** in Querybook. +Here we'll guide you through the process of adding a query engine for **PostgreSQL** as an example. 1. Create a `local.txt` file under the `requirements/` folder in the project's root directory. From c6c58857dabe74b6e8e71c941966d5d38ef9521e Mon Sep 17 00:00:00 2001 From: "J.C. Zhong" Date: Tue, 21 Mar 2023 21:23:18 -0700 Subject: [PATCH 3/3] comments and add psycopg2 --- docs_website/docs/setup_guide/connect_to_a_query_engine.md | 6 +++--- requirements/base.txt | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs_website/docs/setup_guide/connect_to_a_query_engine.md b/docs_website/docs/setup_guide/connect_to_a_query_engine.md index 2f516cd32..0de985f33 100644 --- a/docs_website/docs/setup_guide/connect_to_a_query_engine.md +++ b/docs_website/docs/setup_guide/connect_to_a_query_engine.md @@ -6,7 +6,7 @@ sidebar_label: Connect to a Query Engine ## Prerequisites -- Have the Querybook repository cloned. +- Have the Querybook repository cloned. See [Quick Setup](./quick_setup.md). - Have a PostgreSQL database ready to connect. It could be either on your localhost or on a remote server. ## General Process @@ -16,7 +16,7 @@ sidebar_label: Connect to a Query Engine 3. **[Optional but highly recommended]** Create a new metastore to associate with the query engine. :::info -If dont have an idea of above concepts of **query engine**, **environment** and **metastore**, please refer to [here](../configurations/general_config#environment) +If you dont have an idea of above concepts of **query engine**, **environment** and **metastore**, please refer to [here](../configurations/general_config#environment) ::: ## Step by Step @@ -55,7 +55,7 @@ make postgresql://:@:/ ``` Please refer to the SqlAlchemy [documentation](https://docs.sqlalchemy.org/en/20/core/engines.html#postgresql) for the connection string format. - - Select `ConnectionChecker` as status checker + - Select `SelectOneChecker` as the status checker :::caution About localhost diff --git a/requirements/base.txt b/requirements/base.txt index 9830be5f5..6ce4607db 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -39,3 +39,6 @@ markdown2 pandas==1.3.5 typing-extensions==3.10.0.0 setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability + +# Query engine - PostgreSQL +psycopg2==2.9.5