Amazon Athena Azure Synapse 連接器 - Amazon Athena

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

Amazon Athena Azure Synapse 連接器

適用於 Azure Synapse 分析的 Amazon Athena 連接器可讓 Amazon Athena 使用 JDBC 對 Azure Synapse 資料庫執行 SQL 查詢。

必要條件

限制

  • 不支援寫入 DDL 操作。

  • 在多工器設定中,在所有資料庫執行個體之間共用溢出儲存貯體和字首。

  • 任何相關的 Lambda 限制。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 Lambda 配額

  • 在篩選條件中,您必須將 DateTimestamp 資料類型轉換為適當的資料類型。

  • 若要搜尋類型 RealFloat 的負值,請使用 <= 或者 >= 運算子。

  • 不支援 binaryvarbinaryimage、和 rowversion 資料類型。

條款

下列術語與 Synapse 連接器相關。

  • 資料庫執行個體 - 在內部部署、Amazon EC2 或 Amazon RDS 上部署的任何資料庫執行個體。

  • 處理常式 - 存取資料庫執行個體的 Lambda 處理常式。處理常式可以用於中繼資料或資料記錄。

  • 中繼資料處理常式 - 從資料庫執行個體中擷取中繼資料的 Lambda 處理常式。

  • 記錄處理常式 - 從資料庫執行個體中擷取資料記錄的 Lambda 處理常式。

  • 複合處理常式 - 從資料庫執行個體中擷取中繼資料和資料記錄的 Lambda 處理常式。

  • 屬性或參數 - 處理常式用來擷取資料庫資訊的資料庫屬性。您可以將這些屬性設定為 Lambda 環境變數。

  • 連接字串 - 用來建立資料庫執行個體連線的文字字串。

  • 目錄 — 在 Athena 註冊的非AWS Glue 目錄,是connection_string屬性的必要前置詞。

  • 多工處理常式 - 可以接受和使用多個資料庫連接的 Lambda 處理常式。

參數

使用本節中的 Lambda 環境變數來設定 Synapse 連接器。

連接字串

使用下列格式的 JDBC 連接字串來連接資料庫執行個體。

synapse://${jdbc_connection_string}

使用多工處理常式

您可以使用多工器透過單一 Lambda 函數連接到多個資料庫執行個體。按目錄名稱路由請求。在 Lambda 中使用下列類別。

處理常式 類別
複合處理常式 SynapseMuxCompositeHandler
中繼資料處理常式 SynapseMuxMetadataHandler
記錄處理常式 SynapseMuxRecordHandler

多工處理常式參數

參數 描述
$catalog_connection_string 必要。資料庫執行個體連接字串。在環境變數前面加上 Athena 中使用的目錄名稱。例如,如果向 Athena 註冊的目錄為 mysynapsecatalog,則環境變數名稱為 mysynapsecatalog_connection_string
default 必要。預設的連接字串。目錄為 lambda:${AWS_LAMBDA_FUNCTION_NAME} 時,使用此字串。

下列範例屬性適用於支援兩個資料庫執行個體的 Synapse MUX Lambda 函數:synapse1 (預設) 和 synapse2

屬性 Value
default synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database_name>;${secret1_name}
synapse_catalog1_connection_string synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database_name>;${secret1_name}
synapse_catalog2_connection_string synapse://jdbc:synapse://synapse2.hostname:port;databaseName=<database_name>;${secret2_name}

提供憑證

要在 JDBC 連接字串中提供資料庫的使用者名稱和密碼,可以使用連接字串屬性或 AWS Secrets Manager。

  • 連接字串 - 可以將使用者名稱和密碼指定為 JDBC 連接字串中的屬性。

    重要

    作為安全最佳實務,請勿在您的環境變數或連線字串中使用硬式編碼憑證。如需有關將硬式編碼密碼移至的資訊 AWS Secrets Manager,請參閱《AWS Secrets Manager 使用者指南》 AWS Secrets Manager中的「將硬式編碼密碼移至」。

  • AWS Secrets Manager— 若要搭配使用 Athena 聯合查詢功能 AWS Secrets Manager,連線至 Lambda 函數的虛擬私人雲端應具有網際網路存取權限,或具有連線至 Secrets Manager 的 VPC 端點

    您可以在 JDBC 連接字符串 AWS Secrets Manager 中輸入密碼的名稱。連接器將秘密名稱取代為 Secrets Manager 中的 usernamepassword 值。

    對於 Amazon RDS 資料庫執行個體,已緊密整合此支援。如果您使用 Amazon RDS,我們強烈建議您使用 AWS Secrets Manager 和登入資料輪替。如果您的資料庫不使用 Amazon RDS,請以下列格式將憑證儲存為 JSON:

    {"username": "${username}", "password": "${password}"}
帶有秘密名稱的連接字串範例

以下字串具有秘密名稱 ${secret_name}。

synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;${secret_name}

連接器會使用秘密名稱來擷取秘密並提供使用者名稱和密碼,如下列範例所示。

synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;user=<user>;password=<password>

使用單一連接處理常式

您可以使用下列單一連接中繼資料和記錄處理常式來連接至單一 Synapse 執行個體。

處理常式類型 類別
複合處理常式 SynapseCompositeHandler
中繼資料處理常式 SynapseMetadataHandler
記錄處理常式 SynapseRecordHandler

單一連接處理常式參數

參數 描述
default 必要。預設的連接字串。

單一連接處理常式支援一個資料庫執行個體,並且必須提供 default 連接字串參數。忽略所有其他連接字串。

下列範例屬性適用於 Lambda 函數所支援的單一 Synapse 執行個體。

屬性 Value
default synapse://jdbc:sqlserver://hostname:port;databaseName=<database_name>;${secret_name}

設定 Active Directory 身分驗證

Amazon Athena Azure Synapse 連接器支援 Microsoft Active Directory 身分驗證。在開始之前,您必須在 Microsoft Azure 入口網站中設定系統管理使用者,然後使用 AWS Secrets Manager 來建立密碼。

若要設定 Active Directory 管理使用者
  1. 使用具有管理權限的帳戶,登入 Microsoft Azure 入口網站 https://portal.azure.com/

  2. 在搜尋方塊中,輸入 Azure Synapse Analytics,然後選擇 Azure Synapse Analytics

    選擇 Azure Synapse Analytics。
  3. 開啟左側的選單。

    選擇 Azure 入口網站選單。
  4. 在導覽窗格中,依序選擇 Azure Active Directory

  5. 設定管理員索引標籤上,將 Active Directory 管理員設定為新的或現有的使用者。

    使用設定管理員索引標籤
  6. 在中 AWS Secrets Manager,儲存管理員使用者名稱和密碼認證。如需有關在 Secrets Manager 中建立祕密的詳細資訊,請參閱建立 AWS Secrets Manager 祕密

若要檢視 Secrets Manager 中的祕密
  1. 前往以下位置開啟機密管理員控制台:https://console.aws.amazon.com/secretsmanager/

  2. 在導覽窗格中,選擇 Secrets (祕密)。

  3. Secrets (祕密) 頁面中,選擇祕密的連結。

  4. 在祕密的詳細資訊頁面上,選擇 Retrieve secret value (擷取祕密值)。

    在中檢視密碼 AWS Secrets Manager。

修改連線字串

若要啟用連接器的 Active Directory 身分驗證,請使用下列語法修改連線字串:

synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryPassword;{secret_name}
使用 ActiveDirectoryServicePrincipal

Amazon Athena Azure Synapse 連接器也支援 ActiveDirectoryServicePrincipal。若要啟用此功能,請依照下列方式修改連線字串。

synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryServicePrincipal;{secret_name}

對於 secret_name,指定應用程式或用戶端 ID 做為密碼中服務主體識別的使用者名稱和秘密。

溢出參數

Lambda SDK 可能會將資料溢出至 Amazon S3。由相同 Lambda 函數存取的所有資料庫執行個體溢出到相同的位置。

參數 描述
spill_bucket 必要。溢出儲存貯體名稱。
spill_prefix 必要。溢出儲存貯體金鑰字首。
spill_put_request_headers (選用) 用於溢出的 Amazon S3 putObject 請求的請求標頭和值的 JSON 編碼映射 (例如,{"x-amz-server-side-encryption" : "AES256"})。如需其他可能的標頭,請參閱 Amazon 簡單儲存服務 API 參考PutObject中的。

支援的資料類型

下表顯示 Synapse 和 Apache Arrow 的相應資料類型。

Synapse Arrow
bit TINYINT
tinyint SMALLINT
smallint SMALLINT
int INT
bigint BIGINT
decimal DECIMAL
numeric FLOAT8
smallmoney FLOAT8
money DECIMAL
float[24] FLOAT4
float[53] FLOAT8
real FLOAT4
datetime Date(MILLISECOND)
datetime2 Date(MILLISECOND)
smalldatetime Date(MILLISECOND)
date Date(DAY)
time VARCHAR
datetimeoffset Date(MILLISECOND)
char[n] VARCHAR
varchar[n/max] VARCHAR
nchar[n] VARCHAR
nvarchar[n/max] VARCHAR

分割區和分隔

分割區由 varchar 類型的單一分割區資料欄表示。Synapse 支援範圍分割,因此透過從 Synapse 中繼資料表中擷取分割區資料欄和分割區範圍來執行分割。這些範圍值用於建立分割。

效能

選取資料欄子集會大幅拖慢查詢執行時間。連接器會顯示因為並行而導致的嚴重限流。

Athena Synapse 連接器執行述詞下推,以減少查詢掃描的資料。簡單述詞和複雜表達式會下推至連接器,以減少掃描的資料量並減少查詢執行時間。

述詞

述詞是 SQL 查詢的 WHERE 子句中的一種表達式,它會評估為布林值,並根據多個條件篩選資料列。Athena Synapse 連接器可以合併這些表達式,並將其直接推送至 Synapse,以增強功能並減少掃描的資料量。

下列 Athena Synapse 連接器運算子支援述詞下推:

  • 布林值:AND、OR、NOT

  • 等式:EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATER_THAN_OR_EQUAL、NULL_IF、IS_NULL

  • 算術:ADD、SUBTRACT、MULTIPLY、DIVIDE、MODULUS、NEGATE

  • 其他:LIKE_PATTERN、IN

合併下推範例

如需增強的查詢功能,請合併下推類型,如以下範例所示:

SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');

直通查詢

突觸連接器支持直通查詢。傳遞查詢使用資料表函數將完整查詢推送至資料來源以進行執行。

要使用 Synapse 的直通查詢,您可以使用以下語法:

SELECT * FROM TABLE( system.query( query => 'query string' ))

以下示例查詢將查詢向下推送到 Synapse 中的數據源。查詢會選取資料customer表中的所有資料行,將結果限制為 10。

SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))

授權資訊

使用此連接器即表示您確認已包含協力廠商元件,其清單可在此連接器的 pom.xml 檔案中找到,並同意 GitHub .com 上 LICENSE.txt 檔案中提供的個別協力廠商授權中的條款。

其他資源