本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Athena 郵政連接器 SQL
Amazon Athena Postgre SQL 連接器可讓 Athena 存取您的 Postgre SQL 資料庫。
必要條件
使用 Athena 主控台或 AWS Serverless Application Repository,將連接器部署到您的 AWS 帳戶 。如需詳細資訊,請參閱 部署資料來源連接器 或 使用部署 AWS Serverless Application Repository 資料來源連接器。
限制
-
不支DDL援寫入作業。
-
在多工器設定中,在所有資料庫執行個體之間共用溢出儲存貯體和字首。
-
任何相關的 Lambda 限制。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 Lambda 配額。
-
像 Postgre 一樣SQL,Athena 將 Postgre SQL
CHAR
類型中的尾隨空格視為語義上微不足道的長度和比較目的。請注意,這僅適用於類型,CHAR
但不適用於VARCHAR
類型。Athena 會忽略CHAR
類型的尾隨空格,但會將它們視為VARCHAR
類型的重要空格。 -
當您使用 citext
不區分大小寫的字元字串資料類型時,Postgre SQL 會使用與 Athena 不區分大小寫的資料比較。此差異會在SQL JOIN
作業期間建立資料差異。若要解決此問題,請使用 Postgre SQL 連接器傳遞查詢功能。如需詳細資訊,請參閱本文件稍後的「傳遞查詢」一節。
條款
下列術語與 Postgre SQL 連接器有關。
-
資料庫執行個體 — 部署在內部部署、Amazon 或 Amazon EC2 上的任何資料庫執行個體RDS。
-
處理常式 - 存取資料庫執行個體的 Lambda 處理常式。處理常式可以用於中繼資料或資料記錄。
-
中繼資料處理常式 - 從資料庫執行個體中擷取中繼資料的 Lambda 處理常式。
-
記錄處理常式 - 從資料庫執行個體中擷取資料記錄的 Lambda 處理常式。
-
複合處理常式 - 從資料庫執行個體中擷取中繼資料和資料記錄的 Lambda 處理常式。
-
屬性或參數 - 處理常式用來擷取資料庫資訊的資料庫屬性。您可以將這些屬性設定為 Lambda 環境變數。
-
連接字串 - 用來建立資料庫執行個體連線的文字字串。
-
目錄 — 在 Athena 註冊的非AWS Glue 目錄,是
connection_string
屬性的必要前置詞。 -
多工處理常式 - 可以接受和使用多個資料庫連接的 Lambda 處理常式。
參數
使用本節中的 Lambda 環境變數來設定 Postgre SQL 連接器。
連接字串
使用下列格式的JDBC連接字串連線至資料庫執行個體。
postgres://${
jdbc_connection_string
}
使用多工處理常式
您可以使用多工器透過單一 Lambda 函數連接到多個資料庫執行個體。按目錄名稱路由請求。在 Lambda 中使用下列類別。
處理常式 | 類別 |
---|---|
複合處理常式 | PostGreSqlMuxCompositeHandler |
中繼資料處理常式 | PostGreSqlMuxMetadataHandler |
記錄處理常式 | PostGreSqlMuxRecordHandler |
多工處理常式參數
參數 | 描述 |
---|---|
$ |
必要。資料庫執行個體連接字串。在環境變數前面加上 Athena 中使用的目錄名稱。例如,如果向 Athena 註冊的目錄為 mypostgrescatalog ,則環境變數名稱為 mypostgrescatalog_connection_string 。 |
default |
必要。預設的連接字串。目錄為時,會使用此字串 lambda:${ AWS_LAMBDA_FUNCTION_NAME } . |
下列範例屬性適用於支援兩個資料庫執行個體的 PostGreSql MUX Lambda 函數:postgres1
(預設值) 和postgres2
.
屬性 | Value |
---|---|
default |
postgres://jdbc:postgresql://postgres1.host:5432/default?${Test/RDS/PostGres1} |
postgres_catalog1_connection_string |
postgres://jdbc:postgresql://postgres1.host:5432/default?${Test/RDS/PostGres1} |
postgres_catalog2_connection_string |
postgres://jdbc:postgresql://postgres2.host:5432/default?user=sample&password=sample |
提供憑證
若要在JDBC連接字串中提供資料庫的使用者名稱和密碼,您可以使用連接字串屬性或 AWS Secrets Manager.
-
連接字串 — 使用者名稱和密碼可以指定為JDBC連接字串中的屬性。
重要
作為安全最佳實務,請勿在您的環境變數或連線字串中使用硬式編碼憑證。如需有關將硬式編碼密碼移至的資訊 AWS Secrets Manager,請參閱《AWS Secrets Manager 使用指南》 AWS Secrets Manager中的「將硬式編碼密碼移至」。
-
AWS Secrets Manager— 若要搭配使用 Athena 聯合查詢功能 AWS Secrets Manager,VPC連接至您的 Lambda 函數應具有網際網路存取權限
,或具有連線至 Secrets Manager 的VPC端點。 您可以在JDBC連接字符串 AWS Secrets Manager 中輸入秘密的名稱。連接器將秘密名稱取代為 Secrets Manager 中的
username
和password
值。對於 Amazon RDS 資料庫執行個體,此支援已緊密整合。如果您使用 AmazonRDS,我們強烈建議您使用 AWS Secrets Manager 和憑據輪換。如果您的資料庫不使用 AmazonRDS,請以下列格式儲存登入資料:JSON
{"username": "${username}", "password": "${password}"}
帶有秘密名稱的連接字串範例
以下字串具有秘密名稱 ${Test/RDS/PostGres1}
。
postgres://jdbc:postgresql://postgres1.host:5432/default?...&${Test/RDS/PostGres1}&...
連接器會使用秘密名稱來擷取秘密並提供使用者名稱和密碼,如下列範例所示。
postgres://jdbc:postgresql://postgres1.host:5432/default?...&user=sample2&password=sample2&...
目前,Postgre SQL 連接器可識別user
和password
JDBC性質。
啟用 SSL
要支持 Postgre SQL 連接,請將以下SSL內容附加到您的連接字符串中:
&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
範例
下面的例子連接字符串不使用SSL。
postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword
若要啟用SSL,請依照下列方式修改字串。
postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
使用單一連接處理常式
您可以使用下列單一連線中繼資料和記錄處理常式來連線至單一 Postgre SQL 執行個體。
處理常式類型 | 類別 |
---|---|
複合處理常式 | PostGreSqlCompositeHandler |
中繼資料處理常式 | PostGreSqlMetadataHandler |
記錄處理常式 | PostGreSqlRecordHandler |
單一連接處理常式參數
參數 | 描述 |
---|---|
default |
必要。預設的連接字串。 |
單一連接處理常式支援一個資料庫執行個體,並且必須提供 default
連接字串參數。忽略所有其他連接字串。
下列範例屬性適用於 Lambda 函數所支援的單一 Postgre SQL 執行個體。
屬性 | Value |
---|---|
default |
postgres://jdbc:postgresql://postgres1.host:5432/default?secret=${Test/RDS/PostgreSQL1} |
溢出參數
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中的。 |
支援的資料類型
下表顯示JDBC、 PostGreSQL和箭頭的對應資料類型。
JDBC | PostGreSQL | Arrow |
---|---|---|
Boolean | Boolean | 位元 |
Integer | N/A | Tiny |
Short | smallint | Smallint |
Integer | integer | Int |
Long | bigint | Bigint |
float | float4 | Float4 |
Double | float8 | Float8 |
日期 | 日期 | DateDay |
時間戳記 | timestamp | DateMilli |
字串 | text | Varchar |
位元組 | 位元組 | Varbinary |
BigDecimal | numeric(p,s) | Decimal (小數) |
ARRAY | N/A (請參閱備註) | 清單 |
注意
具有下列限制的 Postgre SQL 連接器支援此ARRAY
類型:不支援多維陣列 (
或巢狀陣列)。具有不受支援之 <data_type>
[][]ARRAY
資料類型的資料欄被轉換為字串元素陣列 (array<varchar>
)。
分割區和分隔
分割區用於決定如何產生連接器的分割。Athena 建構了類型 varchar
的合成資料欄,表示資料表的分割結構,以幫助連接器產生分割。連接器不會修改實際的資料表定義。
效能
SQL支持原生分區。Athena Postgre SQL 連接器可以 parallel 地從這些分割區擷取資料。如果您想要查詢具有統一分割區分佈的非常大的資料集,強烈建議使用原生分割。
Athena Postgre SQL 連接器會執行述詞下推,以減少查詢掃描的資料。 LIMIT
子句、簡單述詞和複雜運算式會向下推送至連接器,以減少掃描的資料量並減少查詢執行時間。不過,選取資料欄子集有時會導致查詢執行期更長。
LIMIT條款
LIMIT N
陳述句可減少查詢掃描的資料。透過 LIMIT N
下推,連接器只會向 Athena 傳回 N
個資料列。
述詞
述詞是SQL查詢WHERE
子句中的運算式,它會評估為布林值,並根據多個條件篩選資料列。Athena Postgre SQL 連接器可以結合這些表達式,並將其直接推送到 Postgre SQL 以增強功能並減少掃描的資料量。
下列 Athena Postgre SQL 連接器運算子支援述詞下推:
-
布林值:AND、或、NOT
-
平等:EQUAL, NOT _EQUAL, _ 或 LESS _THAN, LESS _, THAN _ 或 _EQUAL, 是 GREATER _ _THAN, GREATER _, THAN _EQUAL, _ 如果, 是 _ DISTINCT FROM NULL NULL
-
算術:ADDSUBTRACT,MULTIPLY,DIVIDE,MODULUS,NEGATE
-
其他:LIKE_PATTERN,在
合併下推範例
如需增強的查詢功能,請合併下推類型,如以下範例所示:
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%') LIMIT 10;
直通查詢
Postgre SQL 連接器支援直通查詢。傳遞查詢使用資料表函數將完整查詢推送至資料來源以進行執行。
要將傳遞查詢與 Postgre 一起使用SQL,您可以使用以下語法:
SELECT * FROM TABLE( system.query( query => '
query string
' ))
下列範例查詢會將查詢向下推送至 Post SQL gre 中的資料來源。查詢會選取資料customer
表中的所有資料行,將結果限制為 10。
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
其他資源
如需最新的JDBC驅動程式版本資訊,請參閱 GitHub .com 上適用於 Postgre SQL 連接器的 pom.xml
如需有關此連接器的其他資訊,請造訪 GitHub .com 上的對應網站