From a8e12c6bccd91ae2446d20da15323eaae51e195e Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 12:48:08 -0400 Subject: [PATCH 01/11] Create sissetup_snowsightgit.sql --- sis_setup/sissetup_snowsightgit.sql | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 sis_setup/sissetup_snowsightgit.sql diff --git a/sis_setup/sissetup_snowsightgit.sql b/sis_setup/sissetup_snowsightgit.sql new file mode 100644 index 00000000..98fb5c89 --- /dev/null +++ b/sis_setup/sissetup_snowsightgit.sql @@ -0,0 +1,82 @@ +CREATE DATABASE IF NOT EXISTS CORTEX_ANALYST_SEMANTICS; +USE DATABASE CORTEX_ANALYST_SEMANTICS; + +-- Create API Integration for Git +CREATE OR REPLACE API INTEGRATION git_api_integration_snowflake_labs + API_PROVIDER = git_https_api + API_ALLOWED_PREFIXES = ('https://github.com/Snowflake-Labs') + ENABLED = TRUE; + +-- Create Git Repository +CREATE OR REPLACE GIT REPOSITORY git_snowflake_semantic_model_generator + API_INTEGRATION = git_api_integration_snowflake_labs + ORIGIN = 'https://github.com/Snowflake-Labs/semantic-model-generator.git'; + +ALTER GIT REPOSITORY git_snowflake_semantic_model_generator FETCH; + +-- Create Schema to host streamlit app +CREATE SCHEMA IF NOT EXISTS CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR +COMMENT = '{"origin": "sf_sit", + "name": "skimantics", + "version": {"major": 2, "minor": 0}, + "attributes": {"deployment": "sis"}}'; + +-- Create stage for App logic and 3rd party packages +CREATE OR REPLACE STAGE CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE +DIRECTORY = (ENABLE = true) +COMMENT = '{"origin": "sf_sit", + "name": "skimantics", + "version": {"major": 2, "minor": 0}, + "attributes": {"deployment": "sis"}}'; + +-- Copy Files from Git Repository into App Stage +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/app_utils/ + PATTERN='.*[.]zip'; + +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/ + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/ + FILES = ('environment.yml', 'app.py'); + +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/semantic_model_generator/ + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/semantic_model_generator/ + PATTERN='.*[.]py'; + +RM @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/semantic_model_generator/tests; +RM @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/semantic_model_generator/output_models; + +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/images/ + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/images/ + PATTERN='.*[.]png'; + +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/journeys/ + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/journeys/ + PATTERN='.*[.]py'; + +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/partner/ + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/partner/ + PATTERN='.*[.]py'; + +COPY FILES + INTO @CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator/app_utils/ + FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/app_utils/ + PATTERN='.*[.]py'; + +-- Create Streamlit App +CREATE OR REPLACE STREAMLIT CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.SEMANTIC_MODEL_GENERATOR +ROOT_LOCATION = '@CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator' +MAIN_FILE = 'app.py' +TITLE = "Semantic Model Generator" +IMPORTS = ('@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/looker_sdk.zip', +'@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/strictyaml.zip') +QUERY_WAREHOUSE = COMPUTE_WH +COMMENT = '{"origin": "sf_sit", + "name": "skimantics", + "version": {"major": 2, "minor": 0}, + "attributes": {"deployment": "sis"}}'; From f07e2685c98f657e44b74b1a3ee32ae1b6fbfa7a Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:08:16 -0400 Subject: [PATCH 02/11] Update README.md updates to 3.9 enablement, added MG's Git Integration code. --- README.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 31cf0226..a27964f3 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,28 @@ If you want to see what a semantic model looks like, skip to [Examples](#example ## Streamlit in Snowflake Deployment -> **Note**: Deploying this app in Streamlit in Snowflake requires support for python 3.9+ in Streamlit in Snowflake, which is in Private Preview. Please contact your account representative to enable if not already enabled. We also require streamlit 1.35.0, which is generally available. +> **Note**: Deploying this app in Streamlit in Snowflake requires support for python 3.9+ in Streamlit in Snowflake. This feature is part of the 2024-08 BCR (Behavior Change Bundle) which is currently **disabled by default**. A user with ACCOUNTADMIN priveleges can enable this feature in your account by running the following code in Snowsight: +> +```sql +SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_08'); +``` +> You can check to see if this BCR is already enabled by running: +```sql +SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_08'); +``` +> A typical error you might see if you do not have this feature enabled looks like this: +![images/error39.png](https://github.com/user-attachments/assets/d296adf7-d27d-41ca-bd62-72939ac85be2) +> +> For more information on this bundle please see our [BCR Documentation](https://docs.snowflake.com/en/release-notes/behavior-changes). [Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/index) is recommended for deploying the app in Streamlit in Snowflake. Please see Snowflake CLI [installation instructions](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/installation/installation) to install. **Snowflake CLI version 3.0+ is required**. Follow the below instructions to install the Semantic Model Generator in Streamlit in Snowflake. -If you do not have Snowflake CLI installed, Steps #2 and #3 below can be replicated manually with the [VS Code Snowflake extension](https://docs.snowflake.com/en/user-guide/vscode-ext) or Snowsight. Please note that parameters passed (with flag `-D`) will be need to be hard-coded in the `.sql` files directly. If using Snowsight, you may use the files upload wizard to upload files. Please pay close attention to maintain the directory structure referenced in `setup_sis/app_setup.sql`. +If you do not have Snowflake CLI installed, Steps #2 and #3 below can be replicated manually with the [VS Code Snowflake extension](https://docs.snowflake.com/en/user-guide/vscode-ext), Snowsight or [Snowflake Native Git Integration](https://docs.snowflake.com/en/developer-guide/git/git-overview): + - For VS Code extention, please note that parameters passed (with flag `-D`) will be need to be hard-coded in the `.sql` files directly. + - If using Snowsight, you may use the files upload wizard to upload files. Please pay close attention to maintain the directory structure referenced in `setup_sis/app_setup.sql`. + - If using the Native Git Integration, copy and paste the code from this [setup file](https://github.com/Snowflake-Labs/semantic-model-generator/edit/main/sissetup_snowsightgit.sql) and run in Snowsight. + +For CLI installation: 1. Configure Snowflake CLI From 90e747275f19fbcadbb68cf89edf72b5b6ef402b Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:08:55 -0400 Subject: [PATCH 03/11] Add files via upload --- images/error39.png | Bin 0 -> 96629 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/error39.png diff --git a/images/error39.png b/images/error39.png new file mode 100644 index 0000000000000000000000000000000000000000..c0965847057d589512c8eef12761557bb27dd991 GIT binary patch literal 96629 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 VMa1e+ti6K#NsB9pm5Uez{vRkKo6`UQ literal 0 HcmV?d00001 From e16073dc95a54a536acb868098493c2a0e9b2ac5 Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:16:19 -0400 Subject: [PATCH 04/11] Update README.md resized image --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a27964f3..fba63698 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,10 @@ SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_08'); SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_08'); ``` > A typical error you might see if you do not have this feature enabled looks like this: -![images/error39.png](https://github.com/user-attachments/assets/d296adf7-d27d-41ca-bd62-72939ac85be2) -> -> For more information on this bundle please see our [BCR Documentation](https://docs.snowflake.com/en/release-notes/behavior-changes). + + +> For more information on this bundle please see our [BCR Documentation](https://docs.snowflake.com/en/release-notes/behavior-changes). + [Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/index) is recommended for deploying the app in Streamlit in Snowflake. Please see Snowflake CLI [installation instructions](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/installation/installation) to install. **Snowflake CLI version 3.0+ is required**. Follow the below instructions to install the Semantic Model Generator in Streamlit in Snowflake. From c42fdf019ba0134cbc466d6d403a98caad360dbc Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:35:38 -0400 Subject: [PATCH 05/11] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fba63698..0700896a 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ If you want to see what a semantic model looks like, skip to [Examples](#example ## Streamlit in Snowflake Deployment -> **Note**: Deploying this app in Streamlit in Snowflake requires support for python 3.9+ in Streamlit in Snowflake. This feature is part of the 2024-08 BCR (Behavior Change Bundle) which is currently **disabled by default**. A user with ACCOUNTADMIN priveleges can enable this feature in your account by running the following code in Snowsight: +> **Note**: Deploying this app in Streamlit in Snowflake requires support for python 3.9+ in Streamlit in Snowflake. This feature is part of the 2024-08 BCR (Behavior Change Bundle) which is currently **disabled by default**. A user with ACCOUNTADMIN privileges can enable this feature in your account by running the following code in Snowsight: > ```sql SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_08'); @@ -42,7 +42,7 @@ SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_08'); If you do not have Snowflake CLI installed, Steps #2 and #3 below can be replicated manually with the [VS Code Snowflake extension](https://docs.snowflake.com/en/user-guide/vscode-ext), Snowsight or [Snowflake Native Git Integration](https://docs.snowflake.com/en/developer-guide/git/git-overview): - For VS Code extention, please note that parameters passed (with flag `-D`) will be need to be hard-coded in the `.sql` files directly. - If using Snowsight, you may use the files upload wizard to upload files. Please pay close attention to maintain the directory structure referenced in `setup_sis/app_setup.sql`. - - If using the Native Git Integration, copy and paste the code from this [setup file](https://github.com/Snowflake-Labs/semantic-model-generator/edit/main/sissetup_snowsightgit.sql) and run in Snowsight. + - If using the Native Git Integration, copy and paste the code from this [setup file](https://github.com/Snowflake-Labs/semantic-model-generator/blob/main/sis_setup/sissetup_snowsightgit.sql) and run in Snowsight. For CLI installation: From 5e54421aae1eed5340a262619cbe25ca519c1075 Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:38:33 -0400 Subject: [PATCH 06/11] Update sissetup_snowsightgit.sql added note on line 71 to Replace with a valid warehouse --- sis_setup/sissetup_snowsightgit.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sis_setup/sissetup_snowsightgit.sql b/sis_setup/sissetup_snowsightgit.sql index 98fb5c89..0a2dfb58 100644 --- a/sis_setup/sissetup_snowsightgit.sql +++ b/sis_setup/sissetup_snowsightgit.sql @@ -68,14 +68,14 @@ COPY FILES FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/app_utils/ PATTERN='.*[.]py'; --- Create Streamlit App +-- Create Streamlit App - Replace with a valid warehouse CREATE OR REPLACE STREAMLIT CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.SEMANTIC_MODEL_GENERATOR ROOT_LOCATION = '@CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator' MAIN_FILE = 'app.py' TITLE = "Semantic Model Generator" IMPORTS = ('@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/looker_sdk.zip', '@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/strictyaml.zip') -QUERY_WAREHOUSE = COMPUTE_WH +QUERY_WAREHOUSE = COMMENT = '{"origin": "sf_sit", "name": "skimantics", "version": {"major": 2, "minor": 0}, From ed89ffc30e98df8267777e7194bd8ce79c8f543d Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:49:12 -0400 Subject: [PATCH 07/11] Update sissetup_snowsightgit.sql changed streamlit warehouse to set variable --- sis_setup/sissetup_snowsightgit.sql | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sis_setup/sissetup_snowsightgit.sql b/sis_setup/sissetup_snowsightgit.sql index 0a2dfb58..fe7fa9ec 100644 --- a/sis_setup/sissetup_snowsightgit.sql +++ b/sis_setup/sissetup_snowsightgit.sql @@ -1,3 +1,7 @@ +-- Please first set your Streamlit Warehouse here by replacing with a valid warehouse: + +SET my_streamlit_warehouse=; + CREATE DATABASE IF NOT EXISTS CORTEX_ANALYST_SEMANTICS; USE DATABASE CORTEX_ANALYST_SEMANTICS; @@ -68,14 +72,14 @@ COPY FILES FROM @CORTEX_ANALYST_SEMANTICS.PUBLIC.git_snowflake_semantic_model_generator/branches/main/app_utils/ PATTERN='.*[.]py'; --- Create Streamlit App - Replace with a valid warehouse +-- Create Streamlit App CREATE OR REPLACE STREAMLIT CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.SEMANTIC_MODEL_GENERATOR ROOT_LOCATION = '@CORTEX_ANALYST_SEMANTICS.SEMANTIC_MODEL_GENERATOR.STREAMLIT_STAGE/semantic_model_generator' MAIN_FILE = 'app.py' TITLE = "Semantic Model Generator" IMPORTS = ('@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/looker_sdk.zip', '@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/strictyaml.zip') -QUERY_WAREHOUSE = +QUERY_WAREHOUSE = IDENTIFIER($my_streamlit_warehouse) COMMENT = '{"origin": "sf_sit", "name": "skimantics", "version": {"major": 2, "minor": 0}, From a8b511be2c9071ff1e2518a4ba17a9659cdacc70 Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 16:52:26 -0400 Subject: [PATCH 08/11] Update README.md added context for git integration for warehouse --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0700896a..b3e5651e 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,12 @@ SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_08'); If you do not have Snowflake CLI installed, Steps #2 and #3 below can be replicated manually with the [VS Code Snowflake extension](https://docs.snowflake.com/en/user-guide/vscode-ext), Snowsight or [Snowflake Native Git Integration](https://docs.snowflake.com/en/developer-guide/git/git-overview): - For VS Code extention, please note that parameters passed (with flag `-D`) will be need to be hard-coded in the `.sql` files directly. - If using Snowsight, you may use the files upload wizard to upload files. Please pay close attention to maintain the directory structure referenced in `setup_sis/app_setup.sql`. - - If using the Native Git Integration, copy and paste the code from this [setup file](https://github.com/Snowflake-Labs/semantic-model-generator/blob/main/sis_setup/sissetup_snowsightgit.sql) and run in Snowsight. + - If using the Native Git Integration, copy and paste the code from this [setup file](https://github.com/Snowflake-Labs/semantic-model-generator/blob/main/sis_setup/sissetup_snowsightgit.sql) and run in Snowsight. Please note that you will have to set the Streamlit Warehouse as a variable in line 2: +```sql +SET my_streamlit_warehouse=; +``` -For CLI installation: +Otherwise, for CLI installation: 1. Configure Snowflake CLI From 365827a07ac57892584a0a86cfddd7709563407c Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 17:12:51 -0400 Subject: [PATCH 09/11] Update sissetup_snowsightgit.sql --- sis_setup/sissetup_snowsightgit.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sis_setup/sissetup_snowsightgit.sql b/sis_setup/sissetup_snowsightgit.sql index fe7fa9ec..abfdade7 100644 --- a/sis_setup/sissetup_snowsightgit.sql +++ b/sis_setup/sissetup_snowsightgit.sql @@ -79,7 +79,7 @@ MAIN_FILE = 'app.py' TITLE = "Semantic Model Generator" IMPORTS = ('@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/looker_sdk.zip', '@cortex_analyst_semantics.semantic_model_generator.streamlit_stage/strictyaml.zip') -QUERY_WAREHOUSE = IDENTIFIER($my_streamlit_warehouse) +QUERY_WAREHOUSE = $my_streamlit_warehouse COMMENT = '{"origin": "sf_sit", "name": "skimantics", "version": {"major": 2, "minor": 0}, From c31d597a0a3c9033a76f408f4c6b621f4fd30f8c Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 17:37:07 -0400 Subject: [PATCH 10/11] Update README.md added a header, changed some wording --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3e5651e..e22f8209 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ SELECT SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS('2024_08'); [Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/index) is recommended for deploying the app in Streamlit in Snowflake. Please see Snowflake CLI [installation instructions](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/installation/installation) to install. **Snowflake CLI version 3.0+ is required**. Follow the below instructions to install the Semantic Model Generator in Streamlit in Snowflake. -If you do not have Snowflake CLI installed, Steps #2 and #3 below can be replicated manually with the [VS Code Snowflake extension](https://docs.snowflake.com/en/user-guide/vscode-ext), Snowsight or [Snowflake Native Git Integration](https://docs.snowflake.com/en/developer-guide/git/git-overview): +If you do not have Snowflake CLI installed, the setup can be replicated manually with the [VS Code Snowflake extension](https://docs.snowflake.com/en/user-guide/vscode-ext), Snowsight or [Snowflake Native Git Integration](https://docs.snowflake.com/en/developer-guide/git/git-overview): - For VS Code extention, please note that parameters passed (with flag `-D`) will be need to be hard-coded in the `.sql` files directly. - If using Snowsight, you may use the files upload wizard to upload files. Please pay close attention to maintain the directory structure referenced in `setup_sis/app_setup.sql`. - If using the Native Git Integration, copy and paste the code from this [setup file](https://github.com/Snowflake-Labs/semantic-model-generator/blob/main/sis_setup/sissetup_snowsightgit.sql) and run in Snowsight. Please note that you will have to set the Streamlit Warehouse as a variable in line 2: @@ -47,7 +47,7 @@ If you do not have Snowflake CLI installed, Steps #2 and #3 below can be replica SET my_streamlit_warehouse=; ``` -Otherwise, for CLI installation: +## Snowflake CLI Installation: 1. Configure Snowflake CLI From bb8929fe8ebfd8a22e555e6ef83ce7f6f7812eae Mon Sep 17 00:00:00 2001 From: Rachel Blum Date: Mon, 21 Oct 2024 17:50:17 -0400 Subject: [PATCH 11/11] Update README.md --- README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e22f8209..a39bbefb 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ If you do not have Snowflake CLI installed, the setup can be replicated manually SET my_streamlit_warehouse=; ``` -## Snowflake CLI Installation: +### Snowflake CLI Installation 1. Configure Snowflake CLI @@ -70,20 +70,23 @@ The app, titled Semantic Model Generator can be opened directly in Snowsight. Al snow streamlit get-url SEMANTIC_MODEL_GENERATOR --open --database cortex_analyst_semantics --schema semantic_model_generator ``` -3. **OPTIONAL**: Setup Looker Integration +### **OPTIONAL**: Setup Looker Integration The Semantic Model Generator supports translating metadata from a Looker Explore. To add this functionality to the Streamlit in Snowflake app, we need to create an external access integration to allow Snowflake to reach your Looker instance. -Run the below command to create the external access integration. Before running, replace the following parameters: -- `` with your [Looker Base URL](https://cloud.google.com/looker/docs/admin-panel-platform-api#api_host_url). Pass the domain excluding https:// such as snowflakedemo.looker.com. -- `` with your [Looker Client Secret](https://cloud.google.com/looker/docs/api-auth#authentication_with_an_sdk) -- `` with the owning role used in step #2 above +Have the following information available: +- ``: [Looker Base URL](https://cloud.google.com/looker/docs/admin-panel-platform-api#api_host_url). Pass the domain excluding https:// such as snowflakedemo.looker.com. +- ``: [Looker Client Secret](https://cloud.google.com/looker/docs/api-auth#authentication_with_an_sdk) +- ``: the owning role used in step #2 above -**Hint**: Running the below, which creates external access integrations, may require increased privileges. To use a different role from what is specified in your Snowflake CLI connection, append `--role ` to the end of the command, replacing ``. +If using the CLI method, run the below command to create the external access integration. Before running, replace the parameters. + +**Hint**: Creating external access integrations may require increased privileges. To use a different role from what is specified in your Snowflake CLI connection, append `--role ` to the end of the command, replacing ``. ```bash snow sql -f sis_setup/looker_integration.sql -D "looker_url=" -D "client_secret=" -D "streamlit_role=" ``` +If using any other method (e.g., Git Integration), you will need to update and run [looker_integration.sql](https://github.com/Snowflake-Labs/semantic-model-generator/blob/main/sis_setup/looker_integration.sql) in Snowsight with these variables replaced. ## Local Deployment