本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Athena Vertica 連接器
Vertica 是一種單欄式資料庫平台,可部署在雲端或進行內部部署,以支援 Exabyte 艾位元組規模的資料倉儲。您可以在聯合查詢中使用 Amazon Athena Vertica 連接器,查詢來自 Athena 的 Vertica 資料來源。例如,您可以在 Vertica 上的資料倉儲和 Simple Storage Service (Amazon S3) 中的資料湖上執行分析查詢。
此連接器不會使用 Glue Connections 來集中 Glue 中的組態屬性。連線組態是透過 Lambda 完成。
先決條件
使用 Athena 主控台或 AWS Serverless Application Repository,將連接器部署到您的 AWS 帳戶 。如需詳細資訊,請參閱 建立資料來源連線 或 使用 AWS Serverless Application Repository 部署資料來源連接器。
您必須先設定 VPC 和安全群組,才能使用此連接器。如需詳細資訊,請參閱為資料來源連接器或 AWS Glue 連線建立 VPC。
限制
-
由於 Athena Vertica 連接器會從 Amazon S3 讀取匯出的 Parquet 檔案,因此連接器的效能可能會很慢。查詢大型資料表時,建議您使用 CREATE TABLE AS (SELECT ...) 查詢和 SQL 述詞。
-
目前,由於 Athena Federated Query 中存在已知問題,連接器會讓 Vertica 將已查詢資料表的所有資料欄匯出至 Amazon S3,但在 Athena 主控台的結果中只能看到已查詢的資料欄。
-
不支援寫入 DDL 操作。
-
任何相關的 Lambda 限制。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 Lambda 配額。
工作流程
下圖顯示使用 Vertica 連接器的查詢工作流程。

-
針對 Vertica 中的一個或多個資料表發出 SQL 查詢。
-
連接器會解析 SQL 查詢,以透過 JDBC 連接將相關部分傳送至 Vertica。
-
連線字串使用存放在 中的使用者名稱和密碼 AWS Secrets Manager 來存取 Vertica。
-
連接器使用 Vertica
EXPORT
命令包裝 SQL 查詢,如下例所示。EXPORT TO PARQUET (directory = 's3://amzn-s3-demo-bucket/
folder_name
, Compression='Snappy', fileSizeMB=64) OVER() as SELECT PATH_ID, ... SOURCE_ITEMIZED, SOURCE_OVERRIDE FROM DELETED_OBJECT_SCHEMA.FORM_USAGE_DATA WHERE PATH_ID <= 5; -
Vertica 處理 SQL 查詢,並將結果集傳送至 Amazon S3 儲存貯體。為了獲得更好的輸送量,Vertica 使用
EXPORT
選項來平行處理多個 Parquet 檔案的寫入操作。 -
Athena 會掃描 Amazon S3 儲存貯體,以確定要為結果集讀取的檔案數。
-
Athena 對 Lambda 函數進行多次呼叫,並使用 Apache 從產生的資料集
ArrowReader
讀取 Parquet 檔案。多個呼叫可讓 Athena 平行讀取 Amazon S3 檔案,並達到每秒高達 100GB 的輸送量。 -
Athena 會使用從資料湖掃描的資料來處理從 Vertica 傳回的資料,並傳回結果。
條款
下列術語與 Vertica 連接器相關。
-
資料庫執行個體 - 部署在 Amazon EC2 上的 Vertica 資料庫的任何執行個體。
-
處理常式 - 存取資料庫執行個體的 Lambda 處理常式。處理常式可以用於中繼資料或資料記錄。
-
中繼資料處理常式 - 從資料庫執行個體中擷取中繼資料的 Lambda 處理常式。
-
記錄處理常式 - 從資料庫執行個體中擷取資料記錄的 Lambda 處理常式。
-
複合處理常式 - 從資料庫執行個體中擷取中繼資料和資料記錄的 Lambda 處理常式。
-
屬性或參數 - 處理常式用來擷取資料庫資訊的資料庫屬性。您可以將這些屬性設定為 Lambda 環境變數。
-
連接字串 - 用來建立資料庫執行個體連線的文字字串。
-
目錄 – 向 Athena 註冊的非AWS Glue 目錄,是
connection_string
屬性的必要字首。
參數
Amazon Athena Vertica 連接器透過 Lambda 環境變數公開組態選項。您可以使用下列 Lambda 環境變數來設定連接器。
-
AthenaCatalogName - Lambda 函數名稱
-
ExportBucket - 匯出 Vertica 查詢結果的 Amazon S3 儲存貯體。
-
SpillBucket - 此函數可在其中溢出資料的 Amazon S3 儲存貯體的名稱。
-
SpillPrefix - 此函數可在其中溢出資料的
SpillBucket
位置的字首。 -
SecurityGroupIds - 一個或多個 ID,其對應於應套用至 Lambda 函數的安全群組 (例如,
sg1
、sg2
或sg3
)。 -
SubnetIds - 一個或多個子網 ID,其對應於 Lambda 函數可用來存取資料來源的子網 (例如,
subnet1
或subnet2
)。 -
SecretNameOrPrefix - 此函數可以存取的 Secrets Manager 中的一組名稱的名稱或字首 (例如,
vertica-*
) -
VerticaConnectionString - 如果未定義目錄特定連接,預設會使用 Vertica 連接詳細資訊。字串可以選擇性地使用語法 AWS Secrets Manager (例如
${secret_name}
)。 -
VPC ID - 連接至 Lambda 函數的 VPC ID。
連接字串
使用下列格式的 JDBC 連接字串來連接資料庫執行個體。
vertica://jdbc:vertica://
host_name
:port
/database
?user=vertica-username
&password=vertica-password
使用單一連接處理常式
您可以使用下列單一連接中繼資料和記錄處理常式來連接至單一 Vertica 執行個體。
處理常式類型 | 類別 |
---|---|
複合處理常式 | VerticaCompositeHandler |
中繼資料處理常式 | VerticaMetadataHandler |
記錄處理常式 | VerticaRecordHandler |
單一連接處理常式參數
參數 | 描述 |
---|---|
default |
必要。預設的連接字串。 |
單一連接處理常式支援一個資料庫執行個體,並且必須提供 default
連接字串參數。忽略所有其他連接字串。
提供憑證
要在 JDBC 連接字串中提供資料庫的使用者名稱和密碼,可以使用連接字串屬性或 AWS Secrets Manager。
-
連接字串 - 可以將使用者名稱和密碼指定為 JDBC 連接字串中的屬性。
重要
作為安全最佳實務,請勿在您的環境變數或連線字串中使用硬式編碼憑證。如需將硬式編碼秘密移至 的資訊 AWS Secrets Manager,請參閱AWS Secrets Manager 《 使用者指南》中的將硬式編碼秘密移至 AWS Secrets Manager 。
-
AWS Secrets Manager – 若要搭配 Athena 聯合查詢功能使用 AWS Secrets Manager,連接至 Lambda 函數的 VPC 應具有網際網路存取
或 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}"}
帶有秘密名稱的連接字串範例
以下字串具有秘密名稱 ${vertica-username
} 和 ${vertica-password}
。
vertica://jdbc:vertica://
host_name
:port
/database
?user=${vertica-username}&password=${vertica-password}
連接器會使用秘密名稱來擷取秘密並提供使用者名稱和密碼,如下列範例所示。
vertica://jdbc:vertica://
host_name
:port
/database
?user=sample-user&password=sample-password
目前,Vertica 連接器可辨識 vertica-username
和 vertica-password
JDBC 屬性。
溢出參數
Lambda SDK 可能會將資料溢出至 Amazon S3。由相同 Lambda 函數存取的所有資料庫執行個體溢出到相同的位置。
參數 | 描述 |
---|---|
spill_bucket |
必要。溢出儲存貯體名稱。 |
spill_prefix |
必要。溢出儲存貯體金鑰字首。 |
spill_put_request_headers |
(選用) 用於溢出的 Amazon S3 putObject 請求的請求標頭和值的 JSON 編碼映射 (例如,{"x-amz-server-side-encryption" :
"AES256"} )。如需了解其他可能的標頭,請參閱《Amazon Simple Storage Service API 參考》中的 PutObject。 |
支援的資料類型
下表顯示 Vertica 連接器支援的資料類型。
Boolean |
---|
BigInt |
Short |
Integer |
Long |
Float |
Double |
日期 |
Varchar |
位元組 |
BigDecimal |
TimeStamp as Varchar |
效能
Lambda 函數執行投影下推,以減少查詢掃描的資料。LIMIT
子句可減少掃描的資料量,但是如果未提供述詞,則應預期含有 LIMIT
子句的 SELECT
查詢可掃描至少 16 MB 的資料。Vertica 連接器由於並行而對限流保有彈性。
傳遞查詢
Vertica 連接器支援傳遞查詢。傳遞查詢使用資料表函數,將您的完整查詢向下推送至資料來源以進行執行。
若要搭配 Vertica 使用傳遞查詢,您可以使用下列語法:
SELECT * FROM TABLE( system.query( query => '
query string
' ))
下列範例查詢會將查詢向下推送至 Vertica 中的資料來源。查詢會選取customer
資料表中的所有資料欄,將結果限制為 10。
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
授權資訊
使用此連接器,即表示您確認已包含第三方元件,可在此連接器的 pom.xml
其他資源
如需最新的 JDBC 驅動程式版本資訊,請參閱 GitHub.com 上 Vertica 連接器的 pom.xml
如需有關此連接器的其他資訊,請參閱 GitHub.com 上的相應網站