Amazon Athena Microsoft SQL Server 連接器 - Amazon Athena

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

Amazon Athena Microsoft SQL Server 連接器

Microsoft SQL Server 的 Amazon Athena 連接器可讓 Amazon Athena 使用 對存放在 Microsoft SQL Server 中的資料執行SQL查詢JDBC。

此連接器無法向 Glue Data Catalog 註冊為聯合型錄。此連接器不支援 Lake Formation 中在目錄、資料庫、資料表、資料欄、資料列和標籤層級定義的資料存取控制。此連接器使用 Glue Connections 來集中 Glue 中的組態屬性。

必要條件

限制

  • 不支援寫入DDL操作。

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

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

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

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

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

條款

下列詞彙與SQL伺服器連接器相關。

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

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

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

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

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

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

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

  • 目錄 – 向 Athena 註冊的非AWS Glue 目錄,是 connection_string 屬性的必要字首。

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

參數

使用本節中的參數來設定SQL伺服器連接器。

注意

Athena 資料來源連接器於 2024 年 12 月 3 日及之後建立,使用 AWS Glue 連線。

下列參數名稱和定義適用於 2024 年 12 月 3 日之前建立的 Athena 資料來源連接器。這些可能與其對應的AWS Glue 連線屬性不同。自 2024 年 12 月 3 日起,只有在您手動部署舊版 Athena 資料來源連接器時,才能使用下列參數。

連接字串

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

sqlserver://${jdbc_connection_string}

使用多工處理常式

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

處理常式 類別
複合處理常式 SqlServerMuxCompositeHandler
中繼資料處理常式 SqlServerMuxMetadataHandler
記錄處理常式 SqlServerMuxRecordHandler

多工處理常式參數

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

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

屬性 Value
default sqlserver://jdbc:sqlserver://sqlserver1.hostname:port;databaseName=<database_name>;${secret1_name}
sqlserver_catalog1_connection_string sqlserver://jdbc:sqlserver://sqlserver1.hostname:port;databaseName=<database_name>;${secret1_name}
sqlserver_catalog2_connection_string sqlserver://jdbc:sqlserver://sqlserver2.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,VPC連接至 Lambda 函數的 應具有網際網路存取VPC端點,以連接至 Secrets Manager。

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

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

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

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

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

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

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

使用單一連接處理常式

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

處理常式類型 類別
複合處理常式 SqlServerCompositeHandler
中繼資料處理常式 SqlServerMetadataHandler
記錄處理常式 SqlServerRecordHandler

單一連接處理常式參數

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

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

下列範例屬性適用於 Lambda 函數支援的單一SQL伺服器執行個體。

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

溢出參數

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

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

支援的資料類型

下表顯示SQL伺服器和 Apache Arrow 的對應資料類型。

SQL 伺服器 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
text VARCHAR
ntext VARCHAR

分割區和分隔

分割區由 varchar 類型的單一分割區資料欄表示。在SQL伺服器連接器的情況下,分割區函數會決定如何將分割區套用至資料表。分割區函數和資料欄名稱資訊會從SQL伺服器中繼資料資料表擷取。然後,自訂查詢可獲取分割區。根據收到的不同分割區數目建立分割。

效能

選取資料欄子集可大幅加速查詢執行期,並減少掃描的資料。由於並行,SQL伺服器連接器可彈性調節。

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

述詞

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

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

  • 布林值:AND、OR、 NOT

  • 等式:EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATER_、THAN__OR_EQUAL、ISDISTINCT_FROM、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%');

傳遞查詢

SQL 伺服器連接器支援傳遞查詢。傳遞查詢使用資料表函數,將您的完整查詢向下推送至資料來源以進行執行。

若要搭配 SQL 伺服器使用傳遞查詢,您可以使用下列語法:

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

下列範例查詢會將查詢下推至SQL伺服器中的資料來源。查詢會選取customer資料表中的所有資料欄,將結果限制為 10。

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

授權資訊

使用此連接器,即表示您確認包含第三方元件,該元件的清單可在此連接器的 pom.xml 檔案中找到,並同意 .LICENSEtxt 檔案上提供的個別第三方授權中的條款 GitHub。

其他資源

如需最新的JDBC驅動程式版本資訊,請參閱 上的SQL伺服器連接器的 pom.xml 檔案 GitHub。

如需此連接器的詳細資訊,請造訪對應的網站 on.com GitHub。