Connect to data
Snowflake
Connect to data
Snowflake
Follow these steps to connect your Snowflake instance to Kaldea.
To connect Snowflake to Kaldea, you will need Admin access to your Snowflake instance.
Complete all of the following steps to see Snowflake metadata in Kaldea:
- Create a Kaldea role and user in Snowflake
- Create Kaldea system credential in Snowflake
- Add users with proper roles in Snowflake
- Connect to Kaldea with the created user credentials
1. Create Kaldea user in Snowflake
Using the ACCOUNT_ADMIN
role, execute the following SQL:
SQL
CREATE OR REPLACE ROLE kaldea_user_role;
/* Permission to operate a warehouse for querying and crawling */
GRANT OPERATE, USAGE ON WAREHOUSE "<warehouse-name>" TO ROLE kaldea_user_role;
/* Permission on database, schema, tables, external tables and view. This should be repeated for every database you wish to integrate into Kaldea */
GRANT USAGE ON DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT USAGE, CREATE TABLE, CREATE EXTERNAL TABLE, CREATE VIEW, CREATE MATERIALIZED VIEW, CREATE FUNCTION, CREATE PROCEDURE ON ALL SCHEMAS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, REFERENCES ON ALL EXTERNAL TABLES IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, REFERENCES ON ALL VIEWS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, REFERENCES ON ALL MATERIALIZED VIEWS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT USAGE ON ALL FUNCTIONS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT USAGE ON ALL PROCEDURES IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT USAGE, CREATE TABLE, CREATE EXTERNAL TABLE, CREATE VIEW, CREATE MATERIALIZED VIEW, CREATE FUNCTION, CREATE PROCEDURE ON FUTURE SCHEMAS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ON FUTURE TABLES IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, REFERENCES ON FUTURE EXTERNAL TABLES IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, REFERENCES ON FUTURE VIEWS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT SELECT, REFERENCES ON FUTURE MATERIALIZED VIEWS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT USAGE ON FUTURE FUNCTIONS IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
GRANT USAGE ON FUTURE PROCEDURES IN DATABASE "<database-name>" TO ROLE kaldea_user_role;
/* Permission to enable Snowflake Query History based lineage must use `ACCOUNTADMIN` role */
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE kaldea_system_role
2. Create Kaldea system credential in Snowflake
Using the ACCOUNT_ADMIN
role, execute the following SQL:
SQL
CREATE OR REPLACE ROLE kaldea_system_role;
GRANT ROLE kaldea_user_role to ROLE kaldea_system_role;
/* Permission to manage tags to sync Kaldea tags with Snowflake objects */
GRANT CREATE TAG ON ALL SCHEMAS IN DATABASE "<database-name>" TO ROLE kaldea_system_role;
GRANT CREATE TAG ON FUTURE SCHEMAS IN DATABASE "<database-name>" TO ROLE kaldea_system_role;
GRANT APPLY TAG ON ACCOUNT TO ROLE kaldea_system_role;
/* Permission to manage PII tags */
GRANT APPLY MASKING POLICY ON ACCOUNT TO ROLE kaldea_system_role;
3. Add users with proper roles in Snowflake
Using the ACCOUNT_ADMIN
role, execute the following SQL:
- Create the kaldea default user
SQL
CREATE USER kaldea_user password='<password>' default_role = kaldea_user_role default_warehouse = '<warehouse-name>' display_name = 'Kaldea User';
GRANT ROLE kaldea_user_role TO USER kaldea_user;
- Create the kaldea system user
SQL
CREATE USER kaldea_system password='<password>' default_role = kaldea_system_role default_warehouse = '<warehouse-name>' display_name = 'Kaldea System';
GRANT ROLE kaldea_system_role TO USER kaldea_system;
4.Connect Snowflake to Kaldea
Go to Kaldea Settings. Click + Add Datasource
in the sidebar to create a new Data Source. Use user credentials you have already created in Snowflake to fill in the necessary input fields.