

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

# 搭配 Babelfish 使用 Aurora PostgreSQL 擴充功能
<a name="babelfish-postgres-aws-extensions"></a>

Aurora PostgreSQL 提供使用其他服務的擴充 AWS 功能。以下是支援各種使用案例的選用擴充功能，例如使用 Amazon S3 搭配資料庫叢集以匯入或匯出資料。
+ 若要將資料從 Amazon S3 儲存貯體匯入至 Babelfish 資料庫叢集，需要設定 `aws_s3` Aurora PostgreSQL 擴充功能。此擴充功能還可讓您將資料從 Aurora PostgreSQL 資料庫叢集匯出至 Amazon S3 儲存貯體。
+ AWS Lambda 是一種運算服務，可讓您執行程式碼，而無需佈建或管理伺服器。您可以使用 Lambda 函數執行各種程序，例如處理來自資料庫執行個體的事件通知。若要進一步了解 Lambda，請參閱《*AWS Lambda 開發人員指南*》中的[什麼是 AWS Lambda？](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)。若要從 Babelfish 資料庫叢集叫用 Lambda 函數，需設定 `aws_lambda` Aurora PostgreSQL 擴充功能。

若要為 Babelfish 叢集設定這些擴充功能，首先需要授予載入擴充功能的許可給內部 Babelfish 使用者。授予許可後，就可以載入 Aurora PostgreSQL 擴充功能。

## 在 Babelfish 資料庫叢集中啟用 Aurora PostgreSQL 擴充功能
<a name="babelfish-postgres-aws-extensions-enabling"></a>

授予 Babelfish 資料庫叢集所需的權限後，才能載入 `aws_s3` 或 `aws_lambda` 擴充功能。

以下程序使用 `psql` PostgreSQL 命令列工具連線到資料庫叢集。如需詳細資訊，請參閱[使用 psql 來連線至資料庫叢集](babelfish-connect-PostgreSQL.md#babelfish-connect-psql)。您也可以使用 pgAdmin。如需詳細資訊，請參閱 [使用 pgAdmin 來連線至資料庫叢集](babelfish-connect-PostgreSQL.md#babelfish-connect-pgadmin)。

此程序會依序載入 `aws_s3` 和 `aws_lambda`。如果您只想使用其中一個擴充功能，就不需要同時載入兩者。各自都需要 `aws_commons` 擴充功能，且會依預設載入，如輸出中所示。

**使用 Aurora PostgreSQL 擴充功能的權限設定 Babelfish 資料庫叢集**

1. 連線至 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=>
   ```

1. 授予內部 Babelfish 使用者建立和載入擴充功能的權限。

   ```
   babelfish_db=> GRANT rds_superuser TO master_dbo;
   GRANT ROLE
   ```

1. 建立並載入 `aws_s3` 擴充功能。`aws_commons` 擴充功能為必要項目，且在安裝 `aws_s3` 時即已自動安裝。

   ```
   babelfish_db=> create extension aws_s3 cascade;
   NOTICE:  installing required extension "aws_commons"
   CREATE EXTENSION
   ```

1. 建立並載入 `aws_lambda` 擴充功能。

   ```
   babelfish_db=> create extension aws_lambda cascade;
   CREATE EXTENSION
   babelfish_db=>
   ```

## 搭配使用 Babelfish 與 Amazon S3
<a name="babelfish-postgres-aws-extensions-using-aws_s3"></a>

如果您還沒有 Amazon S3 儲存貯體能與 Babelfish 資料庫叢集搭配使用，可以建立一個儲存貯體。為您想使用的任何 Amazon S3 儲存貯體提供存取權。

嘗試使用 Amazon S3 儲存貯體匯入或匯出資料之前，請完成以下一次性步驟。

**為 Babelfish 資料庫執行個體設定 Amazon S3 儲存貯體的存取權**

1. 如果需要，可為 Babelfish 執行個體建立 Amazon S3 儲存貯體。若要執行此作業，請依照《Amazon Simple Storage Service 使用者 Guideguide-s3-user;》**中[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.htmlurl-s3-user;GetStartedWithS3.html#creating-bucket)提供的說明操作。

1. 將檔案上傳至 Amazon S3 儲存貯體。若要執行此作業，請依照《Amazon Simple Storage Service 使用者 Guideguide-s3-user;》**中[將物件新增到儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.htmlurl-s3-user;GetStartedWithS3.html#uploading-an-object-bucket)的說明操作。

1. 視需要設定許可：
   + 若要從 Amazon S3 匯入資料，Babelfish 資料庫叢集需要存取儲存貯體的許可。建議您使用 AWS Identity and Access Management (IAM) 角色，並將 IAM 政策連接至叢集的該角色。若要啟用，請依照「[使用 IAM 角色存取 Amazon S3 儲存貯體](USER_PostgreSQL.S3Import.AccessPermission.md#USER_PostgreSQL.S3Import.ARNRole)」中的步驟進行。
   + 若要從 Babelfish 資料庫叢集中匯出資料，必須將 Amazon S3 儲存貯體的存取權授予叢集。與匯入一樣，建議使用 IAM 角色和政策。若要啟用，請依照「[設定對 Amazon S3 儲存貯體的存取權](postgresql-s3-export-access-bucket.md)」中的步驟進行。

您現在可以搭配 Babelfish 資料庫叢集使用 Amazon S3 與 `aws_s3` 擴充功能。

**將資料從 Amazon S3 匯入至 Babelfish 以及將 Babelfish 資料匯出至 Amazon S3**

1. 搭配 Babelfish 資料庫叢集使用 `aws_s3` 擴充功能。

   執行此操作時，請務必以資料表存在於 PostgreSQL 情境的方式參考資料表。也就是說，如果你想匯入至名稱為 `[database].[schema].[tableA]` 的 Babelfish 資料表，請在 `aws_s3` 函數中以 `database_schema_tableA` 參考該表:
   + 如需使用 `aws_s3` 函數匯入資料的範例，請參閱 [將資料從 Amazon S3 匯入 Aurora PostgreSQL 資料庫叢集 ](USER_PostgreSQL.S3Import.FileFormats.md)。
   + 如需使用 `aws_s3` 函數匯出資料的範例，請參閱 [使用 aws\$1s3.query\$1export\$1to\$1s3 函數匯出查詢資料](postgresql-s3-export-examples.md)。

1. 使用 `aws_s3` 擴充功能和 Amazon S3 時，請務必以 PostgreSQL 命名方式參考 Babelfish 資料表，如下表所示。


| Babelfish 資料表 | Aurora PostgreSQL 資料表 | 
| --- | --- | 
| `database.schema.table` | `database_schema_table` | 

若要進一步了解如何將 Amazon S3 與 Aurora PostgreSQL 搭配使用，請參閱 [將資料從 Amazon S3 匯入 Aurora PostgreSQL 資料庫叢集 ](USER_PostgreSQL.S3Import.md) 和 [將資料從 Aurora PostgreSQL 資料庫叢集匯出至 Amazon S3](postgresql-s3-export.md)。

## 搭配 使用 Babelfish AWS Lambda
<a name="babelfish-postgres-aws-extensions-using-aws_lambda"></a>

`aws_lambda` 擴充功能載入 Babelfish 資料庫叢集中之後，但在叫用 Lambda 函數之前，您可以按照此程序為資料庫叢集提供 Lambda 存取權。

**為 Babelfish 資料庫叢集設定存取權以搭配使用 Lambda**

此程序使用 AWS CLI 建立 IAM 政策和角色，並將其與 Babelfish 資料庫叢集建立關聯。

1. 建立允許從 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"
           }
       ]
   }'
   ```

1. 建立政策可在執行時擔任的 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"
           }
       ]
   }'
   ```

1. 將政策連接到角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::444455556666:policy/rds-lambda-policy \
       --role-name rds-lambda-role --region aws-region
   ```

1. 將角色連接至 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   \
          --region aws-region
   ```

完成這些任務後，您就可以叫用 Lambda 函數。如需使用 設定 AWS Lambda Aurora PostgreSQL 資料庫叢集的詳細資訊和範例 AWS Lambda，請參閱 [步驟 2：為您的 Aurora PostgreSQL 資料庫叢集 和 設定 IAM AWS Lambda](PostgreSQL-Lambda.md#PostgreSQL-Lambda-access)。

**從 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`。

1. 使用 `psql` 用戶端 (或 pgAdmin 用戶端) 連線至 Babelfish 資料庫叢集。如需詳細資訊，請參閱[使用 psql 來連線至資料庫叢集](babelfish-connect-PostgreSQL.md#babelfish-connect-psql)。

1. 建立包裝函式。此範例針對 SQL 使用 PostgreSQL 的程序語言 `PL/pgSQL`。如需進一步了解，請參閱 [PL/PGSQL-SQL 程序性語言](https://www.postgresql.org/docs/13/plpgsql.html)。

   ```
   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) 執行該函數。

   1. 若要從 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)
      ```

   1. 若要從 TDS 連接埠叫用 (呼叫) 此函數，請使用 SQL Server `sqlcmd` 命令列用戶端連線到連接埠。如需詳細資訊，請參閱[使用 SQL Server 用戶端來連線至資料庫叢集](babelfish-connect-sqlserver.md)。連線後，請執行以下命令：

      ```
      1> select lambda_wrapper();
      2> go
      ```

      此命令會傳回類似以下的輸出：

      ```
      {"statusCode": 200, "body": "\"Hello from Lambda!\""}
      ```

若要進一步了解如何將 Lambda 與 Aurora PostgreSQL 搭配使用，請參閱 [從 Aurora PostgreSQL 資料庫叢集 叫用 AWS Lambda 函數](PostgreSQL-Lambda.md)。如需使用 Lambda 函數的詳細資訊，請參閱《*AWS Lambda 開發人員指南*》中的 [Lambda 入門](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)。

## 在 Babelfish 中使用 pg\$1stat\$1statements
<a name="babelfish-postgres-aws-extensions-using-pgstat"></a>

Babelfish for Aurora PostgreSQL 從 3.3.0 開始支援 `pg_stat_statements` 擴充功能。若要進一步瞭解，請參閱 [pg\$1stat\$1statements](https://www.postgresql.org/docs/current/pgstatstatements.html)。

如需 Aurora PostgreSQL 支援的這個擴充功能版本的詳細資訊，請參閱[擴充功能版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Extensions.html)。

### 建立 pg\$1stat\$1statements 擴充功能
<a name="babelfish-postgres-aws-extensions-using-pgstat-install"></a>

若要開啟 `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 端點建立擴充功能。

### 授權擴充功能
<a name="babelfish-postgres-aws-extensions-using-pgstat-authorization"></a>

根據預設，您可以查看在 T-SQL 資料庫中執行之查詢的統計資料，而不需要任何授權。

若要存取其他人所建立的查詢統計資料，您必須擁有 `pg_read_all_stats` PostgreSQL 角色。按照下面提到的步驟建立 GRANT pg\$1read\$1all\$1stats 命令。

1. 在 T-SQL 中，請使用下列查詢來傳回內部 PG 角色名稱。

   ```
   SELECT rolname FROM pg_roles WHERE oid = USER_ID();
   ```

1. 使用 rds\$1superuser 權限連接到 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\$1stat\$1statements 檢視來存取查詢統計資料：

```
1>create table t1(cola int);
2>go
1>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)
```

### 重設查詢統計
<a name="babelfish-postgres-aws-extensions-using-pgstat-reset"></a>

您可以使用 `pg_stat_statements_reset()` 來重設 pg\$1stat\$1statements 迄今收集的統計資料。若要進一步瞭解，請參閱 [pg\$1stat\$1statements]( https://www.postgresql.org/docs/current/pgstatstatements.html)。目前僅透過 PSQL 端點支援此功能。使用 `rds_superuser` 權限連接到 Babelfish for Aurora PostgreSQL，使用以下命令：

```
SELECT pg_stat_statements_reset();
```

### 限制
<a name="babelfish-postgres-aws-extensions-using-pgstat-limitations"></a>
+ 目前，T-SQL 端點不支援 `pg_stat_statements()`。`pg_stat_statements` 檢視是收集統計資料的建議方法。
+ 某些查詢可能會由 Aurora PostgreSQL 引擎實現的 T-SQL 解析器重寫，`pg_stat_statements` 檢視將顯示重寫的查詢，而不是原始查詢。

  範例

  ```
  select next value for [dbo].[newCounter];
  ```

   上述查詢在 pg\$1stat\$1statements 檢視中重寫如下。

  ```
  select nextval($1);
  ```
+ 根據陳述式的執行流程，某些查詢可能不會被 pg\$1stat\$1statements 追蹤，且在檢視中不可見。這包括下列陳述式：`use dbname`、`goto`、`print`、`raise error`、`set`、`throw`、`declare cursor`。
+ 對於 CREATE LOGIN 和 ALTER LOGIN 陳述式，不會顯示查詢和 queryid。它將顯示權限不足。
+ `pg_stat_statements` 檢視始終包含以下兩個項目，因為這些是由 `sqlcmd` 用戶端內部執行。
  + SET QUOTED\$1IDENTIFIER OFF
  + SET TEXTSIZE 4096

## 在 Babelfish 中使用 pgvector
<a name="babelfish-postgres-aws-extensions-using-pgvector"></a>

pgvector 是一種開放原始碼延伸模組，可讓您直接在 Postgres 資料庫中搜尋類似的資料。Babelfish 現支援從 15.6 和 16.2 版開始的此延伸模組。如需詳細資訊，請參閱 [pgvector 開放原始碼文件](https://github.com/pgvector/pgvector)。

### 先決條件
<a name="babelfish-postgres-aws-extensions-using-pgvector-prereq"></a>

若要啟用 pgvector 功能，請使用下列其中一種方法，在 sys 結構描述中安裝延伸模組：
+ 在 sqlcmd 用戶端中執行下列命令：

  ```
  exec sys.sp_execute_postgresql 'CREATE EXTENSION vector WITH SCHEMA sys';
  ```
+ 連接至 `babelfish_db`，以及在 psql 用戶端中執行下列命令：

  ```
  CREATE EXTENSION vector WITH SCHEMA sys;
  ```

**注意**  
安裝 pgvector 延伸模組後，就只能在您建立的新資料庫連線中使用此向量資料類型。現有的連線無法辨識新的資料類型。

### 受支援的功能
<a name="babelfish-postgres-aws-extensions-using-pgvector-supported"></a>

Babelfish 延伸 T-SQL 功能以支援下列項目：
+ **存放**

  Babelfish 現支援向量資料類型相容的語法，進而增強其 T-SQL 相容性。若要進一步了解如何使用 pgvector 存放資料，請參閱[存放](https://github.com/pgvector/pgvector?tab=readme-ov-file#storing)。
+ **查詢**

   Babelfish 延伸 T-SQL 表達式支援，以包含向量相似性運算子。不過，對於所有其他查詢，仍需要標準 T-SQL 語法。
**注意**  
T-SQL 不支援陣列類型，且資料庫驅動程式沒有任何可處理這些類型的界面。作為解決方法，Babelfish 使用文字字串 (varchar/nvarchar) 來存放向量資料。例如，當您請求向量值 [1,2,3] 時，Babelfish 會傳回字串 '[1,2,3]' 作為回應。您可以根據需求，在應用程式層級剖析和分割此字串。

  若要進一步了解如何使用 pgvector 查詢資料，請參閱[查詢](https://github.com/pgvector/pgvector?tab=readme-ov-file#querying)。
+ **編製索引**

  T-SQL `Create Index` 現在支援 `USING INDEX_METHOD` 語法。您現在可以定義相似性搜尋運算子，以在建立索引時用於特定欄。

  文法也會延伸，以支援必要欄的向量相似性操作 (檢查 column\$1name\$1list\$1with\$1order\$1for\$1vector 文法)。

  ```
  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 為資料編製索引，請參閱[編製索引](https://github.com/pgvector/pgvector?tab=readme-ov-file#indexing)。
+ **效能**
  + 使用 `SET BABELFISH_STATISTICS PROFILE ON` 從 T-SQL 端點針對查詢計劃進行偵錯。
  + 使用 T-SQL 中支援的 `set_config` 函數來增加 `max_parallel_workers_get_gather`。
  + 使用 `IVFFlat` 進行近似搜尋。如需更多詳細資訊，請參閱 [IVFFlat](https://github.com/pgvector/pgvector?tab=readme-ov-file#ivfflat)。

  若要改善 pgvector 的效能，請參閱[效能](https://github.com/pgvector/pgvector?tab=readme-ov-file#performance)。

### 限制
<a name="babelfish-postgres-aws-extensions-using-pgvector-unsupported"></a>
+ Babelfish 不支援混合搜尋的全文搜尋。如需詳細資訊，請參閱[混合搜尋](https://github.com/pgvector/pgvector?tab=readme-ov-file#hybrid-search)。
+ Babelfish 目前不支援重新編製索引功能。不過，您仍可以使用 PostgreSQL 端點來重新編製索引。如需詳細資訊，請參閱[清空](https://github.com/pgvector/pgvector?tab=readme-ov-file#vacuuming)。

## 將 Amazon Aurora 機器學習功能與 Babelfish 搭配使用
<a name="babelfish-postgres-aws-extensions-using-ml"></a>

您可以將 Babelfish for Aurora PostgreSQL 資料庫叢集與 Amazon Aurora 機器學習整合，以延伸其功能。這種順暢整合可讓您存取各種功能強大的服務，例如 Amazon Comprehend 或 Amazon SageMaker AI 或 Amazon Bedrock，每個服務都專為滿足不同的機器學習需求而量身打造。

身為 Babelfish 使用者，您可以在使用 Aurora 機器學習時使用現有的 T-SQL 語法和語意知識。遵循 Aurora PostgreSQL AWS 文件中提供的指示。如需詳細資訊，請參閱[將 Amazon Aurora Machine Learning 與 Aurora PostgreSQL 搭配使用](postgresql-ml.md)。

### 先決條件
<a name="babelfish-postgres-aws-extensions-using-ml-prereq"></a>
+ 在嘗試設定 Babelfish for Aurora PostgreSQL 資料庫叢集以使用 Aurora 機器學習之前，請務必了解相關要求和先決條件。如需詳細資訊，請參閱[將 Aurora Machine Learning 與 Aurora PostgreSQL 搭配使用的建議](postgresql-ml.md#postgresql-ml-prereqs)。
+ 請務必擇一使用 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` 函數處理 T-SQL 語法和語意
<a name="babelfish-postgres-aws-extensions-using-ml-examples"></a>

下列範例說明如何將 T-SQL 語法和語意套用至 Amazon ML 服務：

**Example : aws\$1bedrock.invoke\$1model：使用 Amazon Bedrock 函數的簡單查詢**  

```
aws_bedrock.invoke_model(
   model_id      varchar,
   content_type  text,
   accept_type   text,
   model_input   text)
Returns Varchar(MAX)
```
下列範例示範如何使用 invoke\$1model 調用 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
);
```

**Example : aws\$1comprehend.detect\$1sentiment：使用 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');
```

**Example : aws\$1sagemaker.invoke\$1endpoint：使用 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\$1input 標記為 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 PostgreSQL 使用 Aurora 機器學習的詳細資訊，請參閱[將 Amazon Aurora Machine Learning 與 Aurora PostgreSQL 搭配使用](postgresql-ml.md)。

### 限制
<a name="babelfish-postgres-aws-extensions-using-ml-limit"></a>
+ 雖然 Babelfish 不允許建立陣列，但仍可以處理代表陣列的資料。當您使用會傳回陣列的 `aws_bedrock.invoke_model_get_embeddings` 之類的函數時，系統會以內含陣列元素的字串傳遞結果。