本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Athena Redshift 連接器
Amazon Athena Redshift 連接器可讓 Amazon Athena 存取您的 Amazon Redshift 和 Amazon Redshift Serverless 資料庫,包括 Redshift Serverless 檢視。您可以使用此頁面所述的JDBC連線字串組態設定來連線至任一服務。
此連接器可以向 Glue Data Catalog 註冊為聯合目錄。它支援 Lake Formation 中在目錄、資料庫、資料表、資料欄、資料列和標籤層級定義的資料存取控制。此連接器使用 Glue Connections 來集中 Glue 中的組態屬性。
必要條件
使用 Athena 主控台或 AWS Serverless Application Repository,將連接器部署到您的 AWS 帳戶 。如需詳細資訊,請參閱 建立資料來源連線 或 使用 AWS Serverless Application Repository 部署資料來源連接器。
限制
-
不支援寫入DDL操作。
-
在多工器設定中,在所有資料庫執行個體之間共用溢出儲存貯體和字首。
-
任何相關的 Lambda 限制。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 Lambda 配額。
-
由於 Redshift 不支援外部分割區,因此每次都會擷取由查詢指定的所有資料。
-
如同 Redshift,Athena 會將 Redshift
CHAR
類型的尾端空格視為語意不顯著,以達成長度和比較目的。請注意,這僅適用於CHAR
,但不適用於VARCHAR
類型。Athena 會忽略CHAR
類型的尾端空格,但會將其視為對VARCHAR
類型的顯著空格。
條款
下列術語與 Redshift 連接器相關。
-
資料庫執行個體 – 部署在內部部署、Amazon EC2或 Amazon 上的任何資料庫執行個體RDS。
-
處理常式 - 存取資料庫執行個體的 Lambda 處理常式。處理常式可以用於中繼資料或資料記錄。
-
中繼資料處理常式 - 從資料庫執行個體中擷取中繼資料的 Lambda 處理常式。
-
記錄處理常式 - 從資料庫執行個體中擷取資料記錄的 Lambda 處理常式。
-
複合處理常式 - 從資料庫執行個體中擷取中繼資料和資料記錄的 Lambda 處理常式。
-
屬性或參數 - 處理常式用來擷取資料庫資訊的資料庫屬性。您可以將這些屬性設定為 Lambda 環境變數。
-
連接字串 - 用來建立資料庫執行個體連線的文字字串。
-
目錄 – 向 Athena 註冊的非AWS Glue 目錄,是
connection_string
屬性的必要字首。 -
多工處理常式 - 可以接受和使用多個資料庫連接的 Lambda 處理常式。
參數
使用本節中的參數來設定 Redshift 連接器。
注意
Athena 資料來源連接器於 2024 年 12 月 3 日及之後建立,使用 AWS Glue 連線。
下列參數名稱和定義適用於 2024 年 12 月 3 日之前建立的 Athena 資料來源連接器。這些可能與其對應的AWS Glue 連線屬性不同。自 2024 年 12 月 3 日起,只有在您手動部署舊版 Athena 資料來源連接器時,才使用下列參數。
連接字串
使用下列格式的JDBC連線字串來連線至資料庫執行個體。
redshift://${
jdbc_connection_string
}
使用多工處理常式
您可以使用多工器透過單一 Lambda 函數連接到多個資料庫執行個體。按目錄名稱路由請求。在 Lambda 中使用下列類別。
處理常式 | 類別 |
---|---|
複合處理常式 | RedshiftMuxCompositeHandler |
中繼資料處理常式 | RedshiftMuxMetadataHandler |
記錄處理常式 | RedshiftMuxRecordHandler |
多工處理常式參數
參數 | 描述 |
---|---|
$ |
必要。資料庫執行個體連接字串。在環境變數前面加上 Athena 中使用的目錄名稱。例如,如果向 Athena 註冊的目錄為 myredshiftcatalog ,則環境變數名稱為 myredshiftcatalog_connection_string 。 |
default |
必要。預設的連接字串。當目錄為 時,會使用此字串lambda:${ AWS_LAMBDA_FUNCTION_NAME } 。 |
下列範例屬性適用於支援兩個資料庫執行個體的 Redshift MUX Lambda 函數: redshift1
(預設) 和 redshift2
。
屬性 | Value |
---|---|
default |
redshift://jdbc:redshift://redshift1.host:5439/dev?user=sample2&password=sample2 |
redshift_catalog1_connection_string |
redshift://jdbc:redshift://redshift1.host:3306/default?${Test/RDS/Redshift1} |
redshift_catalog2_connection_string |
redshift://jdbc:redshift://redshift2.host:3333/default?user=sample2&password=sample2 |
提供憑證
若要為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 中的
username
和password
值。對於 Amazon RDS 資料庫執行個體,此支援已緊密整合。如果您使用 Amazon RDS,強烈建議使用 AWS Secrets Manager 和 登入資料輪換。如果您的資料庫不使用 Amazon RDS,請以JSON下列格式存放登入資料:
{"username": "${username}", "password": "${password}"}
帶有秘密名稱的連接字串範例
下列字串的秘密名稱為 ${Test/RDS/ Redshift1
}。
redshift://jdbc:redshift://redshift1.host:3306/default?...&${Test/RDS/Redshift1}&...
連接器會使用秘密名稱來擷取秘密並提供使用者名稱和密碼,如下列範例所示。
redshift://jdbc:redshift://redshift1.host:3306/default?...&user=sample2&password=sample2&...
目前,Redshift 連接器會識別 user
和 password
JDBC 屬性。
溢出參數
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》中的 。 |
支援的資料類型
下表顯示 JDBC和 Apache Arrow 的對應資料類型。
JDBC | Arrow |
---|---|
Boolean | 位元 |
Integer | Tiny |
Short | Smallint |
Integer | Int |
Long | Bigint |
float | Float4 |
Double | Float8 |
日期 | DateDay |
時間戳記 | DateMilli |
字串 | Varchar |
位元組 | Varbinary |
BigDecimal | Decimal (小數) |
ARRAY | 清單 |
分割區和分隔
Redshift 不支援外部分割區。如需效能相關問題的資訊,請參閱 效能。
效能
Athena Redshift 連接器執行述詞下推,以減少查詢掃描的資料。LIMIT
子句、ORDER BY
子句、簡單述詞和複雜的表達式會下推至連接器,以減少掃描的資料量並縮短查詢執行時間。不過,選取資料欄子集有時會導致查詢執行期更長。同時執行多個查詢時,Amazon Redshift 特別容易受到查詢執行速度減慢的影響。
LIMIT 子句
LIMIT N
陳述句可減少查詢掃描的資料。透過 LIMIT N
下推,連接器只會向 Athena 傳回 N
個資料列。
前 N 個查詢
前 N
個查詢會指定結果集的順序,以及傳回的資料列數目的限制。您可以使用這種查詢類型,判斷資料集的前 N
個最大值或前 N
個最小值。透過前 N
個下推,連接器只會向 Athena 傳回 N
個排序的資料列。
述詞
述詞是SQL查詢子WHERE
句中的表達式,可評估為布林值,並根據多個條件篩選資料列。Athena Redshift 連接器可以合併這些表達式,並將其直接推送至 Redshift,以增強功能並減少掃描的資料量。
下列 Athena Redshift 連接器運算子支援述詞下推:
-
布林值:AND、OR、 NOT
-
等式:EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATERTHAN__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%') ORDER BY col_a DESC LIMIT 10;
如需有關使用述詞下推以改善聯合查詢中的效能 (包括 Amazon Redshift) 的文章,請參閱 AWS 大數據部落格中的使用 Amazon Athena 中的述詞下推改善聯合查詢
傳遞查詢
Redshift 連接器支援傳遞查詢。傳遞查詢使用資料表函數,將您的完整查詢向下推送至資料來源以進行執行。
若要搭配 Redshift 使用傳遞查詢,您可以使用下列語法:
SELECT * FROM TABLE( system.query( query => '
query string
' ))
下列範例查詢會將查詢下推至 Redshift 中的資料來源。查詢會選取customer
資料表中的所有資料欄,將結果限制為 10。
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
其他資源
如需最新的JDBC驅動程式版本資訊,請參閱 上 Redshift 連接器的 pom.xml
如需此連接器的詳細資訊,請造訪對應的網站