本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Snowflake 連線
您可以使用 AWS Glue for Spark 在 Glue 4.0 AWS 和更新版本中讀取和寫入 Snowflake 中的資料表。您可以使用 SQL 查詢從 Snowflake 讀取。您可以使用三種方法之一連線至 Snowflake:基本身分驗證 (使用使用者名稱和密碼)、OAuth 身分驗證或金鑰對身分驗證。您可以透過 Glue Data AWS Secrets Manager 連線參考存放在 中的 Snowflake AWS 登入資料。Glue for Spark 的 Data Connection Snowflake AWS 登入資料與爬蟲程式的 Data Catalog Snowflake 登入資料分開存放。您必須選擇 SNOWFLAKE 類型連線,而不是設定為連線至 Snowflake 的 JDBC 類型連線。
如需有關 Snowflake 的詳細資訊,請參閱 Snowflake 網站
設定 Snowflake 連線
透過網際網路連線至 Snowflake 資料庫沒有 AWS 先決條件。
或者,您可以執行下列組態,以使用 Glue AWS 管理您的連線憑證。
使用 Glue AWS 管理您的連線憑證
在 中 AWS Secrets Manager,使用您的 Snowflake 登入資料建立秘密。若要在 Secrets Manager 中建立秘密,請遵循 AWS Secrets Manager 文件中建立 AWS Secrets Manager 秘密中提供的教學課程。建立機密之後,請保留機密名稱
secretName,以便進行下一個步驟。-
對於 OAuth 身分驗證:
選取鍵/值對時,請使用 鍵為
snowflakeUser建立對sfUser選取鍵/值對時,請使用鍵為
OAUTH_CLIENT_SECRET建立對USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET
-
對於金鑰對身分驗證:
選取鍵/值對時,請使用 鍵為
snowflakeUser建立對sfUser選取金鑰/值對時,請使用 金鑰為
私有金鑰建立對pem_private_key
-
針對基本身分驗證:
選取鍵/值對時,請使用 鍵為
snowflakeUser建立對USERNAME選取鍵/值對時,請使用 鍵為
snowflakePassword建立對PASSWORD
-
選取鍵值對時,您可以為 Snowflake 倉儲提供索引鍵
sfWarehouse。 -
選取金鑰/值對時,您可以使用對應的 Spark 屬性名稱作為金鑰,提供額外的 Snowflake 連線屬性。支援的屬性包括:
sfDatabase– Snowflake 資料庫名稱sfSchema– Snowflake 結構描述名稱sfRole– Snowflake 角色名稱
-
在 AWS Glue Studio 主控台中,選擇資料連線,然後選擇建立連線來建立連線。請遵循連線精靈中的步驟完成程序:
選取資料來源時,選取 Snowflake,然後選擇下一步。
輸入連線詳細資訊,例如主機和連接埠。輸入主機 Snowflake URL 時,提供 Snowflake 執行個體的 URL。該 URL 通常使用
格式的主機名稱。不過,URL 格式可能會因您的 Snowflake 帳戶類型 (例如 AWS,Azure 或 Snowflake 託管) 而有所不同。account_identifier.snowflakecomputing.com-
選取 IAM 服務角色時,從下拉式功能表中選擇。這是您帳戶中的 IAM 角色,如果指定 VPC,將用於存取 AWS Secrets Manager 和指派 IP。
選取 AWS 機密時,請提供
secretName。
在精靈的下一步中,設定 Snowflake 連線的屬性。
在精靈的最後一個步驟中,檢閱您的設定,然後完成建立連線的程序。
對於在 Amazon VPC AWS 中託管於 的 Snowflake,您可能需要下列項目:
-
您需要為 Snowflake 進行適當的 Amazon VPC 設定。如需有關如何設定 Amazon VPC 的詳細資訊,請參閱 Snowflake 文件中的 AWS PrivateLink & Snowflake
。 -
您將需要適當的 Glue Amazon VPC AWS 組態。 配置 AWS Glue (AWS PrivateLink) 的介面 VPC 端點 (AWS PrivateLink)
-
您將需要建立提供 Amazon VPC 連線資訊的 AWS Glue Data Catalog 連線 (除了定義 Snowflake 安全登入資料的 AWS Secrets Manager 秘密 ID 之外)。您的 URL 在使用時會變更 AWS PrivateLink,如上一個項目中連結的 Snowflake 文件所述。
-
您需要任務組態,才能將資料目錄連線納入為其他網路連線。
從 Snowflake 資料表讀取
先決條件:您想要讀取的 Snowflake 資料表。您需要 Snowflake 資料表名稱 tableName。如果您的 Snowflake 使用者沒有預設的命名空間集,您將需要 Snowflake 資料庫名稱 databaseName 和結構描述名稱 schemaName。此外,如果您的 Snowflake 使用者沒有預設的倉儲集,您將需要倉儲名稱 warehouseName。若要選取要連線的其他網路連線,請使用 connectionName 參數。
snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )
此外,您可以使用 autopushdown 和 query 參數來讀取 Snowflake 資料表的一部分。這可能比在將結果載入 Spark 後篩選結果的方式更高效。考量一個範例,其中所有銷售額都存放在同一個資料表中,但您只需分析某個商店在假日的銷售額。如果該資訊存放在資料表中,則可以使用述詞下推來擷取結果,如下所示:
snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )
寫入 Snowflake 資料表
先決條件:您想要寫入的 Snowflake 資料庫。您需要最新的或所需的資料表名稱 tableName。如果您的 Snowflake 使用者沒有預設的命名空間集,您將需要 Snowflake 資料庫名稱 databaseName 和結構描述名稱 schemaName。此外,如果您的 Snowflake 使用者沒有預設的倉儲集,您將需要倉儲名稱 warehouseName。若要選取要連線的其他網路連線,請使用 connectionName 參數。
glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )
Snowflake 連線選項參考
Snowflake 連線類型採用下列連線選項:
您可以從 Glue AWS 連線 (sfUrl、sfUser、sfPassword) 擷取本節中的某些參數,在這種情況下,您不需要提供這些參數。您可以提供參數 connectionName 來完成此操作。
您可以使用 參數從 AWS Secrets Manager 秘密擷取連線secretId參數。使用 Secrets Manager 時,如果機密中存在下列 Spark 屬性,則可以自動擷取這些屬性:
sfUser(使用金鑰USERNAME或sfUser)sfPassword(使用基本身分驗證時sfPassword,使用 金鑰PASSWORD或 )sfWarehouse(使用金鑰sfWarehouse)sfDatabase(使用金鑰sfDatabase)sfSchema(使用金鑰sfSchema)sfRole(使用金鑰sfRole)pem_private_key(使用金鑰對身分驗證pem_private_key時使用金鑰 )USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET(使用 OAuth 身分驗證時)
屬性優先順序:在多個位置指定相同的屬性時, AWS Glue 會使用下列優先順序 (從最高到最低):
任務程式碼中明確提供的連線選項
Glue 連線屬性
AWS Secrets Manager 秘密值
secretId(指定 時)Snowflake 使用者預設值
連線到 Snowflake 時,通常使用以下參數。
sfDatabase:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的資料庫。sfSchema:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的結構描述。sfWarehouse:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的預設虛擬倉儲。sfRole:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的預設安全角色。-
sfUrl:(必要) 用於讀取/寫入。以下列格式指定帳戶的主機名稱:。如需有關帳戶識別碼的詳細資訊,請參閱 Snowflake 文件中的 Account Identifiersaccount_identifier.snowflakecomputing.com。 sfUser:(必要) 用於讀取/寫入。Snowflake 使用者的登入名稱。sfPassword— (使用基本身分驗證時必填) 用於讀取/寫入。Snowflake 使用者的密碼。dbtable:使用完整資料表時需要。用於讀取/寫入。要讀取之資料表或向其寫入資料之資料表的名稱。讀取時,將擷取所有資料欄和記錄。-
pem_private_key— (使用金鑰對身分驗證時必填) 用於讀取/寫入。未加密的 b64 編碼私有金鑰字串。Snowflake 使用者的私有金鑰。通常將其從 PEM 檔案中複製出來。如需詳細資訊,請參閱 Snowflake 文件中的金鑰對驗證和金鑰對輪換。 -
USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET— (使用 OAuth 身分驗證時必填) 用於讀取和寫入操作。此值對應至 OAUTH_CLIENT_SECRET,可從設定為為您的帳戶啟用 OAuth 型身分驗證的 Snowflake 安全整合取得。如需詳細資訊,請參閱您的 Snowflake OAuth 安全整合設定文件 - 為自訂用戶端設定 Snowflake OAuth。 query:使用查詢讀取時需要。用於讀取。要執行的確切查詢 (SELECT陳述式)
以下選項用於在連線到 Snowflake 過程中設定特定行為。
-
preactions:用於讀取/寫入。有效值:以分號分隔的 SQL 陳述式清單作為字串。SQL 陳述式會在 Glue AWS 和 Snowflake 之間傳輸資料之前執行。如果陳述式包含%s,則%s會以操作參考的資料表名稱取代。 -
postactions:用於讀取/寫入。SQL 陳述式會在 Glue AWS 和 Snowflake 之間傳輸資料後執行。如果陳述式包含%s,則%s會以操作參考的資料表名稱取代。 -
autopushdown:預設:"on"。有效值:"on"、"off"。此參數控制是否啟用自動查詢下推。如果下推已啟用,則在 Spark 上執行查詢時,若查詢的一部分可以「向下推」到 Snowflake 伺服器,它便會被下推。這可改善某些查詢的效能。如需有關是否可以下推查詢的資訊,請參閱 Snowflake 文件中的 Pushdown。
此外,Glue AWS 可能支援 Snowflake Spark 連接器上的一些可用選項。如需有關 Snowflake Spark 連接器上可用選項的詳細資訊,請參閱 Snowflake 文件中的 Setting Configuration Options for the Connector
Snowflake 身分驗證方法
AWS Glue 支援下列身分驗證方法來連線至 Snowflake:
-
基本身分驗證:提供
sfUser和sfPassword參數。 -
金鑰對身分驗證:提供
sfUser和pem_private_key參數。使用金鑰對身分驗證時,sfPassword參數不是必需的。 -
OAuth 身分驗證:Snowflake 連接器支援 AUTHORIZATION_CODE 授予類型,以請求存取您的 Snowflake 資料。此授予類型稱為「3 邊 OAuth」,因為它涉及將使用者重新導向到第三方授權伺服器,他們可以在其中驗證和核准存取權。透過 Glue AWS 主控台建立連線時,會使用此方法。
-
先決條件:若要使用此身分驗證方法,請確定下列設定已完成:
-
遵循官方 Snowflake 文件為自訂用戶端設定 Snowflake OAuth:為自訂用戶端設定 Snowflake OAuth。
-
在建立 Snowflake 安全整合時設定正確的重新導向 URI。例如:如果您要在 DUB (eu-west-1) 區域中建立連線,您的重新導向 URI 應該是:
https://eu-west-1.console.aws.amazon.com/gluestudio/oauth -
建立安全整合之後,請保留以下資訊,以供建立 Glue 連線時使用:
OAUTH_CLIENT_ID:此值應在 Glue 連線建立頁面上提供為使用者受管用戶端應用程式用戶端 ID。
OAUTH_CLIENT_SECRET:此值應存放在用於連線的 AWS 秘密中,在金鑰 USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET 下。
-
-
OAuth 範圍 — (選用) 定義從 Snowflake 帳戶請求的特定許可或存取層級。例如,範圍可能會限制對特定資源或操作的存取。
此值可以下列格式指定:
session:role:Snowflake_Role_Name範例:
session:role:ANALYST_ROLE
-
授權碼 URL — (必要) 使用者重新導向至登入並授予授權的端點。
範例:
https://host/oauth/authorize
-
授權字符 URL — (必要) 用來交換存取字符授權碼的端點。
範例:
https://host/oauth/token-request
-
使用者受管用戶端應用程式用戶端 ID — (必要) Snowflake 中已註冊 OAuth 用戶端應用程式的唯一識別符
-
AWS 秘密 — (必要) 是指包含下列鍵/值對的 AWS Secrets Manager 秘密:
sfUser - Snowflake 使用者名稱
USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET - 與 OAuth 用戶端應用程式相關聯的用戶端秘密
-
完全支援這三種身分驗證方法,並且可以使用連線選項、Glue 連線或 AWS Secrets Manager 秘密的任意組合進行設定。
Snowflake 連接器限制
使用 Glue for Spark AWS 連線至 Snowflake 受下列限制約束。
-
此連接器不支援任務書籤。如需有關任務書籤的詳細資訊,請參閱 使用任務書籤追蹤處理的資料。
-
此連接器不支援 Snowflake 使用 和
write_dynamic_frame.from_catalog方法來讀取create_dynamic_frame.from_catalog和寫入 AWS Glue Data Catalog 中的資料表。 -
此連接器支援基本身分驗證、金鑰對身分驗證和 OAuth 身分驗證。目前不支援其他身分驗證方法 (例如 SAML)。
-
串流任務不支援此連接器。
-
擷取資訊 (例如使用
query參數擷取) 時,此連接器支援SELECT陳述式型查詢。不支援其他類型的查詢 (例如SHOW、DESC或 DML 陳述式)。 -
Snowflake 會將透過 Snowflake 用戶端提交的查詢文字 (例如 SQL 陳述式) 的大小限制為每個陳述式 1 MB。如需詳細資訊,請參閱 Limits on Query Text Size
。