View a markdown version of this page

將 Snowflake 連接為 Amazon DataZone 中的資料來源 - Amazon DataZone

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Snowflake 連接為 Amazon DataZone 中的資料來源

Amazon DataZone 支援 Snowflake 作為第三方資料來源。將 Snowflake 連線至 Amazon DataZone 專案後,目錄可以為 Snowflake 資料庫和結構描述編製索引、從 Snowflake 的查詢歷史記錄擷取資料欄層級歷程記錄,以及讓您透過聯合從 查詢 Snowflake 資料表。此頁面會逐步引導您使用 CLI 建立 Snowflake AWS 連線。

先決條件

開始之前,請確認下列項目已就緒:

  • Amazon DataZone 網域和您希望 Snowflake 資料編製目錄的專案。請參閱 Amazon DataZone 中的網域和使用者存取權Amazon DataZone 專案和環境

  • Snowflake 帳戶,具有在您要編目的資料庫、結構描述和倉儲中建立角色和授予權限的許可。

  • 在與您的 Amazon DataZone 網域 AWS Secrets Manager 相同的 AWS 帳戶中存取 。

  • 如果您打算從 查詢 Snowflake 資料,則為查詢溢出的 Amazon S3 儲存貯體。

您將依此順序執行步驟:建立 Snowflake 角色、將 Snowflake 登入資料存放在其中 AWS Secrets Manager、尋找 Amazon DataZone 專案環境 ID,然後呼叫 aws datazone create-connection

步驟 1:為 Amazon DataZone 建立 Snowflake 角色

Amazon DataZone 會使用您建立的角色連線至 Snowflake,並授予特定權限。角色授予分為四個類別:

  • 中繼資料同步 — Amazon DataZone 會讀取資料表和檢視的結構,以填入目錄。

  • 譜系同步 — Amazon DataZone 讀取 Snowflake 的 QUERY_HISTORY 和 ACCESS_HISTORY,以衍生資料欄層級譜系。

  • 查詢存取 — 透過 Amazon DataZone 發出的查詢需要,包括來自 的查詢。

  • 倉儲用量 - 角色執行的任何查詢都需要。

在 Snowflake 中執行下列陳述式,將預留位置取代為您的值:

CREATE ROLE <role_name>; -- Metadata: database and schema access GRANT USAGE ON DATABASE <database_name> TO ROLE <role_name>; GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Metadata: table and view structure (no data access) GRANT REFERENCES ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON ALL VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON FUTURE VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Lineage: access to QUERY_HISTORY and ACCESS_HISTORY GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE <role_name>; -- Query access GRANT SELECT ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Optional: include tables created after the role is granted GRANT SELECT ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Warehouse access GRANT USAGE ON WAREHOUSE <warehouse_name> TO ROLE <role_name>; -- Assign the role to the Snowflake user whose credentials DataZone will use GRANT ROLE <role_name> TO USER <snowflake_username>;
重要

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE 歷程記錄需要 。如果沒有,中繼資料同步會成功,但不會擷取任何歷程記錄。

步驟 2:將 Snowflake 登入資料存放在 AWS Secrets Manager

在與您的 Amazon DataZone 網域 AWS Secrets Manager相同的 AWS 帳戶中建立秘密。Amazon DataZone 支援兩種身分驗證方法:使用者名稱和密碼,或金鑰對。

對於使用者名稱和密碼身分驗證,請使用此 JSON 內文:

{ "username": "<snowflake_username>", "password": "<snowflake_password>" }

對於金鑰對身分驗證,請使用此 JSON 內文:

{ "sfUser": "<snowflake_username>", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----" }

標記秘密,以便 Amazon DataZone 可以探索它。這兩個標籤都是必要的:

標籤鍵 Value
AmazonDataZoneDomain 您的 Amazon DataZone 網域 ID
AmazonDataZoneProject 您的 Amazon DataZone 專案 ID

請注意秘密的 ARN。您將在步驟 4 create-connection中將其傳遞至 。

步驟 3:尋找您的專案環境 ID

create-connection API 呼叫需要連線所在的專案環境 ID。您可以從專案使用者角色 ARN 衍生此項目。

專案使用者角色 ARN 遵循此模式:

arn:aws:iam::<account_id>:role/datazone_usr_role_<project_id>_<environment_id>

最後一個區段在最後一個底線之後是環境 ID。例如,在 中:

arn:aws:iam::123456789012:role/datazone_usr_role_a1b2c3dfadsf_58cjkfdsjfd

58cjkfdsjfd 為環境 ID。這是要傳遞的值,如步驟 4 --environment-identifier所示。環境 ID 對應至專案的工具環境。

步驟 4:建立 Snowflake 連線

執行下列 AWS CLI 命令,將預留位置取代為您的值:

aws datazone create-connection \ --domain-identifier <domain_id> \ --environment-identifier <environment_id> \ --name "<connection_name>" \ --description "<optional_description>" \ --props '{ "snowflakeProperties": { "connectivityProperties": { "connectionProperties": { "HOST": "<account>.snowflakecomputing.com", "PORT": "443", "DATABASE": "<database_name>", "WAREHOUSE": "<warehouse_name>", "SCHEMA": "<schema_name>", "ROLE_ARN": "<project_user_role_arn>", "CATALOG_CASING_FILTER": "UPPERCASE_ONLY" }, "athenaProperties": { "spill_bucket": "<project_s3_bucket_name>", "spill_prefix": "<domain_id>/<project_id>/dev/sys/athena" }, "authenticationConfiguration": { "authenticationType": "BASIC", "secretArn": "<secret_arn_from_step_2>" } }, "snowflakeRole": "<role_name_from_step_1>", "identityMapping": { "usernameAttribute": "EMAIL" } } }'

連線屬性參考

屬性 說明
HOST 您的 Snowflake 帳戶 URL。
PORT Snowflake 連接埠。請使用 443
DATABASE 要編製目錄的 Snowflake 資料庫。
WAREHOUSE Snowflake 倉儲 Amazon DataZone 用來執行查詢。
SCHEMA 要編目的 Snowflake 結構描述。
ROLE_ARN 專案使用者角色 ARN (請參閱步驟 3)。
CATALOG_CASING_FILTER 控制編目識別符的案例標準化。有效值為 UPPERCASE_ONLYLOWERCASE_ONLY。如果省略,則 預設為 UPPERCASE_ONLY
spill_bucket 查詢溢出的 S3 儲存貯體名稱。從 查詢 Snowflake 時為必要。
spill_prefix 溢出的 S3 字首,格式為 <domain_id>/<project_id>/dev/sys/athena
authenticationType BASIC 用於使用者名稱/密碼或金鑰對身分驗證。
secretArn 在步驟 2 中建立之秘密的 ARN。
snowflakeRole 步驟 1 中的 Snowflake 角色名稱。
identityMapping.usernameAttribute 設定為 EMAIL

驗證連線

aws datazone get-connection 使用您的網域 ID 和 傳回的連線識別符呼叫 create-connection。在第一個中繼資料同步執行之後,分類的 Snowflake 資料表會出現在專案的 Amazon DataZone 目錄中。