Snowflake 連線 - AWS Glue

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

Snowflake 連線

您可以使用 AWS Glue for Spark 從 AWS Glue 4.0 及更新版本中的 Snowflake 讀取和寫入資料表。您可以使用 SQL 查詢從 Snowflake 讀取。您可以使用使用者和密碼連線至 Snowflake。您可以透過 AWS Glue Data Catalog 參考存放在 AWS Secrets Manager 中的 Snowflake 憑證。AWS Glue for Spark 的 Data Catalog Snowflake 憑證會與爬蟲程式的 Data Catalog Snowflake 憑證分開存放。您必須選擇 SNOWFLAKE 類型連線,而不是設定為連線至 Snowflake 的 JDBC 類型連線。

如需有關 Snowflake 的詳細資訊,請參閱 Snowflake 網站。如需有關 AWS 上的 Snowflake 的詳細資訊,請參閱 Snowflake Data Warehouse on Amazon Web Services

設定 Snowflake 連線

透過網際網路連線到可用的 Snowflake 資料庫沒有 AWS 先決條件。

或者,您可以執行下列組態,以使用 AWS Glue 管理您的連線憑證。

使用 AWS Glue 管理您的連線憑證
  1. 在 Snowflake 中產生一個使用者、snowflakeUser和密碼 snowflakePassword

  2. 在 AWS Secrets Manager 中,使用您的 Snowflake 憑證建立機密。若要在 Secrets Manager 中建立機密,請遵循 AWS Secrets Manager 文件中建立 AWS Secrets Manager 機密中提供的教學課程。建立機密之後,請保留機密名稱 secretName,以便進行下一個步驟。

    • 選取鍵值對時,使用索引鍵 sfUsersnowflakeUser 建立鍵值對。

    • 選取鍵值對時,使用索引鍵 sfPasswordsnowflakePassword 建立鍵值對。

    • 選取鍵值對時,您可以為 Snowflake 倉儲提供索引鍵 sfWarehouse

  3. 在 AWS Glue Data Catalog 中,依照 新增 AWS Glue 連線 中的步驟建立連線。建立連線之後,請保留連線名稱 connectionName,以便進行下一個步驟。

    • 選取連線類型時,請選取 Snowflake。

    • 選取 Snowflake URL 時,請提供 Snowflake 執行個體的 URL。URL 將在表單 account_identifier.snowflakecomputing.com 中使用 hostname。

    • 選取 AWS 機密時,請提供 secretName

  4. 在您的 AWS Glue 任務組態中,提供 connectionName 作為其他網路連線

在下列情況下,您可能需要滿足以下條件:

  • 對於 Amazon VPC 中在 AWS 上託管的 Snowflake

    • 您需要為 Snowflake 進行適當的 Amazon VPC 設定。如需有關如何設定 Amazon VPC 的詳細資訊,請參閱 Snowflake 文件中的 AWS PrivateLink & Snowflake

    • 您需要為 AWS Glue 進行適當的 Amazon VPC 設定。設定 (AWS PrivateLink) 的介面VPC端點 AWS Glue (AWS PrivateLink)

    • 您需要建立 AWS Glue Data Catalog 連線,以提供 Amazon VPC 連線資訊 (除了定義 Snowflake 安全憑證的 AWS Secrets Manager 機密 ID 之外)。您的 URL 會在使用 AWS PrivateLink 時變更,如前一個項目中所連結的 Snowflake 文件所述。

    • 您需要任務組態,才能將資料型錄連線納入為其他網路連線

從 Snowflake 資料表讀取

先決條件:您想要讀取的 Snowflake 資料表。您需要 Snowflake 資料表名稱 tableName。您需要 Snowflake url snowflakeUrl、使用者名稱 snowflakeUser 和密碼 snowflakePassword。如果您的 Snowflake 使用者沒有預設的命名空間集,您將需要 Snowflake 資料庫名稱 databaseName 和結構描述名稱 schemaName。此外,如果您的 Snowflake 使用者沒有預設的倉儲集,您將需要倉儲名稱 warehouseName

例如:

其他先決條件:完成步驟使用 AWS Glue 管理您的連線憑證,以設定 SnowFlakeURLsnowflakeUsernamesnowflakePassword。若要檢閱這些步驟,請參閱上一節 設定 Snowflake 連線。若要選取要連線的其他網路連線,我們將使用 connectionName 參數。

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

此外,您可以使用 autopushdownquery 參數來讀取 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 url snowflakeUrl、使用者名稱 snowflakeUser 和密碼 snowflakePassword。如果您的 Snowflake 使用者沒有預設的命名空間集,您將需要 Snowflake 資料庫名稱 databaseName 和結構描述名稱 schemaName。此外,如果您的 Snowflake 使用者沒有預設的倉儲集,您將需要倉儲名稱 warehouseName

例如:

其他先決條件:完成步驟使用 AWS Glue 管理您的連線憑證,以設定 SnowFlakeURLsnowflakeUsernamesnowflakePassword。若要檢閱這些步驟,請參閱上一節 設定 Snowflake 連線。若要選取要連線的其他網路連線,我們將使用 connectionName 參數。

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Snowflake 連線選項參考

Snowflake 連線類型採用下列連線選項:

您可以從資料型錄連線 (sfUrlsfUsersfPassword) 擷取本節中的某些參數,在這種情況下,您不需要提供它們。您可以提供參數 connectionName 來完成此操作。

您可以從 AWS Secrets Manager 機密 (sfUsersfPassword) 擷取本節中的某些參數,在這種情況下,您不需要提供它們。機密必須提供 sfUsersfPassword 索引鍵下的內容。您可以提供參數 secretId 來完成此操作。

連線到 Snowflake 時,通常使用以下參數。

  • sfDatabase:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的資料庫。

  • sfSchema:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的結構描述。

  • sfWarehouse:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的預設虛擬倉儲。

  • sfRole:未在 Snowflake 中設定使用者預設值時需要。用於讀取/寫入。連線後用於工作階段的預設安全角色。

  • sfUrl:(必要) 用於讀取/寫入。以下列格式指定帳戶的主機名稱:account_identifier.snowflakecomputing.com。如需有關帳戶識別碼的詳細資訊,請參閱 Snowflake 文件中的 Account Identifiers

  • sfUser:(必要) 用於讀取/寫入。Snowflake 使用者的登入名稱。

  • sfPassword — (除非 pem_private_key 提供,否則為必填項) 用於讀取/寫入。Snowflake 使用者的密碼。

  • dbtable:使用完整資料表時需要。用於讀取/寫入。要讀取之資料表或向其寫入資料之資料表的名稱。讀取時,將擷取所有資料欄和記錄。

  • pem_private_key:用於讀取/寫入。未加密的 b64 編碼私有金鑰字串。Snowflake 使用者的私有金鑰。通常將其從 PEM 檔案中複製出來。如需詳細資訊,請參閱 Snowflake 文件中的金鑰對驗證和金鑰對輪換

  • query:使用查詢讀取時需要。用於讀取。要執行的確切查詢 (SELECT 陳述式)

以下選項用於在連線到 Snowflake 過程中設定特定行為。

  • preactions:用於讀取/寫入。有效值:以分號分隔的 SQL 陳述式清單作為字串。SQL 陳述式會在 AWS Glue 和 Snowflake 之間傳輸資料之前執行。如果陳述式包含 %s,則 %s 會以操作參考的資料表名稱取代。

  • postactions:用於讀取/寫入。SQL 陳述式會在 AWS Glue 和 Snowflake 之間傳輸資料之後執行。如果陳述式包含 %s,則 %s 會以操作參考的資料表名稱取代。

  • autopushdown:預設:"on"。有效值:"on""off"。此參數控制是否啟用自動查詢下推。如果下推已啟用,則在 Spark 上執行查詢時,若查詢的一部分可以「向下推」到 Snowflake 伺服器,它便會被下推。這可改善某些查詢的效能。如需有關是否可以下推查詢的資訊,請參閱 Snowflake 文件中的 Pushdown

此外,AWS Glue 可支援 Snowflake Spark 連接器上的某些可用選項。如需有關 Snowflake Spark 連接器上可用選項的詳細資訊,請參閱 Snowflake 文件中的 Setting Configuration Options for the Connector

Snowflake 連接器限制

透過 AWS Glue for Spark 連線到 Snowflake 會受到以下限制。

  • 此連接器不支援任務書籤。如需有關任務書籤的詳細資訊,請參閱 使用任務書籤追蹤處理的資料

  • 此連接器不支援使用 create_dynamic_frame.from_catalogwrite_dynamic_frame.from_catalog 方法,透過 AWS Glue Data Catalog 中的資料表進行 Snowflake 讀取和寫入。

  • 此連接器不支援透過使用者和密碼以外的憑證連線至 Snowflake。

  • 串流任務不支援此連接器。

  • 擷取資訊 (例如使用 query 參數擷取) 時,此連接器支援 SELECT 陳述式型查詢。不支援其他類型的查詢 (例如 SHOWDESC 或 DML 陳述式)。

  • Snowflake 會將透過 Snowflake 用戶端提交的查詢文字 (例如 SQL 陳述式) 的大小限制為每個陳述式 1 MB。如需詳細資訊,請參閱 Limits on Query Text Size