本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 Babelfish 使用 Aurora PostgreSQL 延伸模組
Aurora PostgreSQL 提供擴充功能以使用其他服務 AWS 。以下是支援各種使用案例的選用擴充功能,例如使用 Amazon S3 搭配資料庫叢集以匯入或匯出資料。
若要將資料從 Amazon S3 儲存貯體匯入 Babelfish 資料庫叢集,請設定
aws_s3
Aurora PostgreSQL 延伸模組。此擴充功能也可讓您將資料從 Aurora PostgreSQL 資料庫叢集匯出至 Amazon S3 儲存貯體。AWS Lambda 是一種運算服務,可讓您執行程式碼,而無需佈建或管理伺服器。您可以使用 Lambda 函數執行各種程序,例如處理來自資料庫執行個體的事件通知。若要進一步了解 Lambda,請參閱《AWS Lambda 開發人員指南》中的什麼是 AWS Lambda?。若要從 Babelfish 資料庫叢集叫用 Lambda 函數,請設定
aws_lambda
Aurora PostgreSQL 延伸模組。
若要為 Babelfish 叢集設定這些擴充功能,首先需要授予載入擴充功能的許可給內部 Babelfish 使用者。授予許可後,您可以載入 Aurora PostgreSQL 延伸模組。
在 Babelfish 資料庫叢集中啟用 Aurora PostgreSQL 延伸模組
授予 Babelfish 資料庫叢集所需的權限後,才能載入 aws_s3
或 aws_lambda
擴充功能。
下列程序使用 psql
PostgreSQL 命令列工具來連線至資料庫叢集。如需詳細資訊,請參閱使用 psql 來連線至資料庫叢集。您也可以使用 pgAdmin。如需詳細資訊,請參閱 使用 pgAdmin 來連線至資料庫叢集。
此程序會依序載入 aws_s3
和 aws_lambda
。如果您只想使用其中一個擴充功能,就不需要同時載入兩者。各自都需要 aws_commons
擴充功能,且會依預設載入,如輸出中所示。
設定具有 Aurora PostgreSQL 延伸模組權限的 Babelfish 資料庫叢集
連線至 Babelfish 資料庫叢集。使用您在建立 Babelfish 資料庫叢集時指定的「主要」使用者 (-U) 名稱。預設值 (
postgres
) 顯示在範例中。用於 Linux, macOS、 或 Unix:
psql -h
your-Babelfish.cluster.444455556666-us-east-1.rds.amazonaws.com
\ -U postgres \ -d babelfish_db \ -p 5432用於 Windows:
psql -h
your-Babelfish.cluster.444455556666-us-east-1.rds.amazonaws.com
^ -U postgres ^ -d babelfish_db ^ -p 5432命令回應會出現提示,要求輸入使用者名稱 (-U) 的密碼。
Password:
輸入資料庫叢集使用者名稱 (-U) 的密碼。如果成功連線,會出現類似以下輸出。
psql (13.4) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help.
postgres=>
授予內部 Babelfish 使用者建立和載入擴充功能的權限。
babelfish_db=>
GRANT rds_superuser TO master_dbo;
GRANT ROLE
建立並載入
aws_s3
擴充功能。aws_commons
擴充功能為必要項目,且在安裝aws_s3
時即已自動安裝。babelfish_db=>
create extension aws_s3 cascade;
NOTICE: installing required extension "aws_commons" CREATE EXTENSION
建立並載入
aws_lambda
擴充功能。babelfish_db=>
create extension aws_lambda cascade;
CREATE EXTENSION
babelfish_db=>
搭配使用 Babelfish 與 Amazon S3
如果您還沒有 Amazon S3 儲存貯體能與 Babelfish 資料庫叢集搭配使用,可以建立一個儲存貯體。為您想使用的任何 Amazon S3 儲存貯體提供存取權。
嘗試使用 Amazon S3 儲存貯體匯入或匯出資料之前,請完成以下一次性步驟。
為 Babelfish 資料庫執行個體設定 Amazon S3 儲存貯體的存取權
-
如果需要,可為 Babelfish 執行個體建立 Amazon S3 儲存貯體。若要執行此作業,請依照《Amazon Simple Storage Service 使用者指南》中建立儲存貯體提供的說明操作。
將檔案上傳至 Amazon S3 儲存貯體。若要執行此作業,請依照《Amazon Simple Storage Service 使用者指南》中將物件新增到儲存貯體的說明操作。
-
視需要設定許可:
-
若要從 Amazon S3 匯入資料,Babelfish 資料庫叢集需要存取儲存貯體的許可。建議您使用 AWS Identity and Access Management (IAM) 角色,並將 IAM政策連接至叢集的該角色。若要啟用,請依照「使用 IAM角色來存取 Amazon S3 儲存貯體」中的步驟進行。
-
若要從 Babelfish 資料庫叢集中匯出資料,必須將 Amazon S3 儲存貯體的存取權授予叢集。如同匯入,我們建議您使用 IAM 角色和政策。若要啟用,請依照「設定對 Amazon S3 儲存貯體的存取權」中的步驟進行。
-
您現在可以搭配 Babelfish 資料庫叢集使用 Amazon S3 與 aws_s3
擴充功能。
將資料從 Amazon S3 匯入至 Babelfish 以及將 Babelfish 資料匯出至 Amazon S3
搭配 Babelfish 資料庫叢集使用
aws_s3
擴充功能。執行此操作時,請務必參考存在於 Postgre 內容中的資料表SQL。也就是說,如果你想匯入至名稱為
[database].[schema].[tableA]
的 Babelfish 資料表,請在aws_s3
函數中以database_schema_tableA
參考該表:如需使用
aws_s3
函數匯入資料的範例,請參閱 從 Amazon S3 匯入資料庫執行個體的 Aurora Postgre 料SQL庫叢集 SQL。如需使用
aws_s3
函數匯出資料的範例,請參閱 使用 aws_s3.query_export_to_s3 函數匯出查詢資料。
使用
aws_s3
延伸模組和 Amazon S3 時,請務必使用 PostgreSQL 命名來參考 Babelfish 資料表,如下表所示。
Babelfish 資料表 |
Aurora PostgreSQL 資料表 |
---|---|
|
|
若要進一步了解如何搭配 Aurora Postgre 使用 Amazon S3SQL,請參閱 將資料從 Amazon S3 匯入至適用於 PostgreSQL 資料庫執行個體的 Aurora Postgre 資料庫叢集和 從適用於 PostgreSQL 資料庫執行個體的 Aurora Postgre 資料庫叢集匯出資料至 Amazon S3。
搭配 使用 Babelfish AWS Lambda
aws_lambda
擴充功能載入 Babelfish 資料庫叢集中之後,但在叫用 Lambda 函數之前,您可以按照此程序為資料庫叢集提供 Lambda 存取權。
為 Babelfish 資料庫叢集設定存取權以搭配使用 Lambda
此程序使用 AWS CLI 來建立IAM政策和角色,並將其與 Babelfish 資料庫叢集建立關聯。
建立允許從您的 Babelfish 資料庫叢集存取 Lambda IAM的政策。
aws iam create-policy --policy-name
rds-lambda-policy
--policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToExampleFunction", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:
" } ] }'aws-region
:444455556666:function:my-function建立 政策在執行時間可擔任IAM的角色。
aws iam create-role --role-name
rds-lambda-role
--assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'將政策連接到角色。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
444455556666
:policy/rds-lambda-policy
\ --role-namerds-lambda-role
--regionaws-region
將角色連接至 Babelfish 資料庫叢集
aws rds add-role-to-db-cluster \ --db-cluster-identifier
my-cluster-name
\ --feature-name Lambda \ --role-arn arn:aws:iam::444455556666:role/rds-lambda-role
\ --regionaws-region
完成這些任務後,您就可以叫用 Lambda 函數。如需使用 設定 AWS Lambda Aurora PostgreSQL 資料庫叢集的詳細資訊和範例 AWS Lambda,請參閱 步驟 2:IAM針對 Postgre 資料庫執行個體設定 Aurora 叢集和 AWS Lambda。
從 Babelfish 資料庫叢集叫用 Lambda 函數
AWS Lambda 支援以 Java、Node.js、Python、Ruby 和其他語言編寫的函數。如果叫用的函數會傳回文字,則可以從 Babelfish 資料庫叢集中叫用它。以下範例是傳回問候語的預留位置 python 函數。
lambda_function.py import json def lambda_handler(event, context): #TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!')
Babelfish 目前不支援 JSON。如果您的函數傳回 JSON,您可以使用包裝函式來處理 JSON。例如,假設上方顯示的 lambda_function.py
在 Lambda 中會存放為 my-function
。
使用
psql
用戶端 (或 pgAdmin 用戶端) 連線至 Babelfish 資料庫叢集。如需詳細資訊,請參閱使用 psql 來連線至資料庫叢集。建立包裝函式。此範例針對 SQL、 使用 Postgre SQL的程序語言
PL/pgSQL
。若要進一步了解,請參閱 PL/pg SQL–SQL 程序語言。 create or replace function master_dbo.lambda_wrapper() returns text language plpgsql as $$ declare r_status_code integer; r_payload text; begin SELECT payload INTO r_payload FROM aws_lambda.invoke( aws_commons.create_lambda_function_arn('my-function', 'us-east-1') ,'{"body": "Hello from Postgres!"}'::json ); return r_payload ; end; $$;
函數現在可以從 Babelfish TDS 連接埠 (1433) 或從 PostgreSQL 連接埠 (5433) 執行。
若要從 PostgreSQL 連接埠叫用 (呼叫) 此函數:
SELECT * from aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function', 'us-east-1'), '{"body": "Hello from Postgres!"}'::json );
輸出類似以下內容:
status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)
若要從TDS連接埠叫用 (呼叫) 此函數,請使用 SQL Server
sqlcmd
命令列用戶端連線至連接埠。如需詳細資訊,請參閱 使用 SQL Server 用戶端來連線至資料庫叢集。連線後,請執行以下命令:1>
select lambda_wrapper();
2>
go
此命令會傳回類似以下的輸出:
{"statusCode": 200, "body": "\"Hello from Lambda!\""}
若要進一步了解如何將 Lambda 與 Aurora Postgre 搭配使用SQL,請參閱 調用 AWS Lambda 來自適用於 Postgre SQL 資料庫執行個體的 Aurora 資料庫叢集RDS功能 SQL。如需使用 Lambda 函數的詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 Lambda 入門。
在 Babelfish 中使用 pg_stat_statements
Babelfish for Aurora PostgreSQL 支援從 3.3.0 pg_stat_statements
延伸。若要進一步瞭解,請參閱 pg_stat_statements
如需 Aurora Postgre 支援的此延伸模組版本的詳細資訊SQL,請參閱延伸模組版本。
建立 pg_stat_statements 擴充功能
若要開啟 pg_stat_statements
,您必須開啟查詢識別碼計算。如果 compute_query_id
在參數群組中設定為 on
或 auto
,則會自動完成此操作。compute_query_id
參數的預設值為 auto
。您也需要建立此擴充功能,才能開啟此功能。使用下列命令從 T-SQL 端點安裝延伸模組:
1>
EXEC sp_execute_postgresql 'CREATE EXTENSION pg_stat_statements WITH SCHEMA sys';
您可以使用下列查詢來存取查詢統計資料:
postgres=>
select * from pg_stat_statements;
注意
在安裝過程中,如果您沒有為擴充功能提供結構描述名稱,則預設情況下它將在公開結構描述中建立它。若要存取它,您必須使用帶有結構描述限定詞的方括號,如下所示:
postgres=>
select * from [public].pg_stat_statements;
您也可以從PSQL端點建立擴充功能。
授權擴充功能
根據預設,您可以查看在 T 資料庫SQL內執行之查詢的統計資料,而不需要任何授權。
若要存取其他人建立的查詢統計資料,您需要具有 pg_read_all_stats
PostgreSQL 角色。請依照下列步驟建構 GRANT pg_read_all_stats 命令。
在 T- 中SQL,使用下列查詢來傳回內部 PG 角色名稱。
SELECT rolname FROM pg_roles WHERE oid = USER_ID();
使用 rds_superuser 權限連線至 Babelfish for Aurora PostgreSQL 資料庫,並使用下列命令:
GRANT pg_read_all_stats TO <rolname_from_above_query>
範例
從 T-SQL 端點:
1>
SELECT rolname FROM pg_roles WHERE oid = USER_ID();2>
go
rolname
-------
master_dbo
(1 rows affected)
從PSQL端點:
babelfish_db=# grant pg_read_all_stats to master_dbo;
GRANT ROLE
您可以使用 pg_stat_statements 檢視來存取查詢統計資料:
1>
create table t1(cola int);2>
go1>
insert into t1 values (1),(2),(3);2>
go
(3 rows affected)
1>
select userid, dbid, queryid, query from pg_stat_statements;2>
go
userid dbid queryid query
------ ---- ------- -----
37503 34582 6487973085327558478 select * from t1
37503 34582 6284378402749466286 SET QUOTED_IDENTIFIER OFF
37503 34582 2864302298511657420 insert into t1 values ($1),($2),($3)
10 34582 NULL <insufficient privilege>
37503 34582 5615368793313871642 SET TEXTSIZE 4096
37503 34582 639400815330803392 create table t1(cola int)
(6 rows affected)
重設查詢統計
您可以使用 pg_stat_statements_reset()
來重設 pg_stat_statements 迄今收集的統計資料。若要進一步瞭解,請參閱 pg_stat_statementsrds_superuser
權限連線至 Babelfish for Aurora PostgreSQL,請使用下列命令:
SELECT pg_stat_statements_reset();
限制
目前,
pg_stat_statements()
不支援透過 T-SQL 端點。pg_stat_statements
檢視是收集統計資料的建議方法。部分查詢可能由 Aurora PostgreSQL 引擎實作的 T-SQL 剖析器重新撰寫,
pg_stat_statements
檢視會顯示重新撰寫的查詢,而非原始查詢。範例
select next value for [dbo].[newCounter];
上述查詢在 pg_stat_statements 檢視中重寫如下。
select nextval($1);
根據陳述式的執行流程,某些查詢可能不會被 pg_stat_statements 追蹤,且在檢視中不可見。這包括下列陳述式:
use dbname
、goto
、print
、raise error
、set
、throw
、declare cursor
。對於 CREATELOGIN和 ALTERLOGIN陳述式,不會顯示查詢和 queryid。它將顯示權限不足。
pg_stat_statements
檢視始終包含以下兩個項目,因為這些是由sqlcmd
用戶端內部執行。SET QUOTED_IDENTIFIER OFF
SET TEXTSIZE 4096
在 Babelfish 中使用 pgvector
pgvector 是一種開放原始碼延伸模組,可讓您直接在 Postgres 資料庫中搜尋類似的資料。Babelfish 現在支援從 15.6 和 16.2 版開始的此延伸。如需詳細資訊,請參閱 pgvector 開放原始碼文件
必要條件
若要啟用 pgvector 功能,請使用下列其中一種方法在 sys 結構描述中安裝延伸模組:
-
在 sqlcmd 用戶端中執行下列命令:
exec sys.sp_execute_postgresql 'CREATE EXTENSION vector WITH SCHEMA sys';
在 psql 用戶端中連線至
babelfish_db
並執行下列命令:CREATE EXTENSION vector WITH SCHEMA sys;
注意
安裝 pgvector 延伸模組後,向量資料類型將僅在您建立的新資料庫連線中可用。現有的連線無法辨識新的資料類型。
支援的功能
Babelfish 擴充 T-SQL 功能以支援下列項目:
儲存
Babelfish 現在支援向量資料類型相容的語法,增強其 T SQL相容性。若要進一步了解使用 pgvector 儲存資料,請參閱儲存
。 查詢
Babelfish 擴展 T-SQL 表達式支援,以包含向量相似性運算子。不過,對於所有其他查詢,仍然需要標準 T SQL語法。
注意
T-SQL 不支援陣列類型,且資料庫驅動程式沒有任何可處理的界面。作為解決方法,Babelfish 使用文字字串 (varchar/nvarchar) 來存放向量資料。例如,當您請求向量值 【1,2,3】 時,Babelfish 會傳回字串 '【1,2,3】' 作為回應。您可以根據您的需求,在應用程式層級剖析和分割此字串。
若要進一步了解如何使用 pgvector 查詢資料,請參閱查詢
。 編製索引
T-SQL
Create Index
現在支援USING INDEX_METHOD
語法。您現在可以定義相似性搜尋運算子,以在建立索引時用於特定資料欄。文法也會擴展,以支援必要資料欄上的向量相似性操作 (檢查 column_name_list_with_order_for_vector 文法)。
CREATE [UNIQUE] [clustered] [COLUMNSTORE] INDEX <index_name> ON <table_name> [USING vector_index_method] (<column_name_list_with_order_for_vector>) Where column_name_list_with_order_for_vector is: <column_name> [ASC | DESC] [VECTOR_COSINE_OPS | VECTOR_IP_OPS | VECTOR_L2_OPS] (COMMA simple_column_name [ASC | DESC] [VECTOR_COSINE_OPS | VECTOR_IP_OPS | VECTOR_L2_OPS])
若要進一步了解使用 pgvector 為資料編製索引,請參閱編製索引
。 效能
SET BABELFISH_STATISTICS PROFILE ON
使用 從 T-SQL 端點偵錯查詢計劃。max_parallel_workers_get_gather
使用 T- 中支援的set_config
函數來增加 SQL。使用
IVFFlat
進行近似搜尋。如需詳細資訊,請參閱IVFFlat。
若要改善 pgvector 的效能,請參閱效能
。
限制
搭配 Babelfish 使用 Amazon Aurora 機器學習
您可以將 Babelfish for Aurora PostgreSQL 資料庫叢集與 Amazon Aurora Machine Learning 整合,以擴展其功能。這種無縫整合可讓您存取各種功能強大的服務,例如 Amazon Comprehend 或 Amazon SageMaker AI 或 Amazon Bedrock,每個服務都專為滿足不同的機器學習需求而量身打造。
身為 Babelfish 使用者,您可以在使用 Aurora Machine Learning 時使用現有的 TSQL 語法和語意知識。請遵循 Aurora Postgre AWS 文件中提供的指示SQL。如需詳細資訊,請參閱搭配 Aurora Postgre 使用 Amazon Aurora 機器學習SQL。
必要條件
在嘗試設定 Babelfish for Aurora PostgreSQL 資料庫叢集以使用 Aurora 機器學習之前,您必須了解相關要求和先決條件。如需詳細資訊,請參閱搭配 Aurora Postgre 使用 Aurora 機器學習的要求SQL。
請確定您使用 Postgres 端點或
sp_execute_postgresql
存放程序安裝aws_ml
擴充功能。exec sys.sp_execute_postgresql 'Create Extension aws_ml'
注意
Babelfish 目前不支援在 Babelfish
sp_execute_postgresql
中使用 的層疊操作。由於aws_ml
依賴aws_commons
,因此您需要使用 Postgres 端點單獨安裝它。create extension aws_common;
使用 aws_ml
函數處理 TSQL 語法和語意
下列範例說明如何將 T-SQL 語法和語意套用至 Amazon ML 服務:
範例 :aws_bedrock.invoke_model – 使用 Amazon Bedrock 函數的簡單查詢
aws_bedrock.invoke_model( model_id varchar, content_type text, accept_type text, model_input text) Returns Varchar(MAX)
下列範例示範如何使用 invoke_model 叫用 Bedrock 的 Anthropic Claude 2 模型。
SELECT aws_bedrock.invoke_model ( 'anthropic.claude-v2', -- model_id 'application/json', -- content_type 'application/json', -- accept_type '{"prompt": "\n\nHuman: You are a helpful assistant that answers questions directly and only using the information provided in the context below. \nDescribe the answerin detail.\n\nContext: %s \n\nQuestion: %s \n\nAssistant:","max_tokens_to_sample":4096,"temperature" :0.5,"top_k":250,"top_p":0.5,"stop_sequences":[]}' -- model_input );
範例 :aws_comprehend.detect_sentiment – 使用 Amazon Comprehend 函數的簡單查詢
aws_comprehend.detect_sentiment( input_text varchar, language_code varchar, max_rows_per_batch int) Returns table (sentiment varchar, confidence real)
下列範例示範如何叫用 Amazon Comprehend 服務。
select sentiment from aws_comprehend.detect_sentiment('This is great', 'en');
範例 :aws_sagemaker.invoke_endpoint – 使用 Amazon SageMaker 函數的簡單查詢
aws_sagemaker.invoke_endpoint( endpoint_name varchar, max_rows_per_batch int, VARIADIC model_input "any") -- Babelfish inherits PG's variadic parameter type Rerurns Varchar(MAX)
由於 model_input 標示為 VARIADIC且類型為「任何」,因此使用者可以將任意長度和任何資料類型的清單傳遞至 函數,該函數將做為模型的輸入。下列範例示範如何叫用 Amazon SageMaker 服務。
SELECT CAST (aws_sagemaker.invoke_endpoint( 'sagemaker_model_endpoint_name', NULL, arg1, arg2 -- model inputs are separate arguments ) AS INT) -- cast the output to INT
如需搭配 Aurora Postgre 使用 Aurora 機器學習的詳細資訊SQL,請參閱 搭配 Aurora Postgre 使用 Amazon Aurora 機器學習SQL。
限制
-
雖然 Babelfish 不允許建立陣列,但仍然可以處理代表陣列的資料。當您使用
aws_bedrock.invoke_model_get_embeddings
像傳回陣列這樣的函數時,結果會以包含陣列元素的字串傳遞。