

# Babelfish で Aurora PostgreSQL 拡張機能を使用する
<a name="babelfish-postgres-aws-extensions"></a>

Aurora PostgreSQL には、他の AWS のサービスとの連携のための拡張機能が用意されています。これらは、データのインポートやエクスポートに DB クラスターで Amazon S3 を使用するなど、さまざまなユースケースをサポートするオプションの拡張機能です。
+ Amazon S3 バケットから Babelfish for Aurora PostgreSQL DB クラスターにデータをインポートするには、`aws_s3` Aurora PostgreSQL 拡張機能をセットアップします。この拡張機能を使用すると、Aurora PostgreSQL DB クラスターから Amazon S3 バケットにデータをエクスポートすることもできます。
+ AWS Lambda はサーバーのプロビジョニングや管理をする必要がなく、コードを実行できるコンピューティングサービスです。DB インスタンスのイベント通知を処理するときなどに Lambda 関数を使用できます。Lambda の詳細については、*AWS Lambda デベロッパーガイド*の「[AWS Lambda とは](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)」を参照してください。Babelfish DB クラスターから Lambda 関数を呼び出すには、`aws_lambda` Aurora PostgreSQL 拡張機能をセットアップします。

Babelfish クラスターにこれらの拡張機能をセットアップするには、まず内部 Babelfish ユーザーに拡張機能をロードするアクセス許可を付与する必要があります。アクセス許可を付与した後、Aurora PostgreSQL 拡張機能をロードできます。

## Babelfish DB クラスターで Aurora PostgreSQL 拡張機能を有効にする
<a name="babelfish-postgres-aws-extensions-enabling"></a>

`aws_s3` または `aws_lambda` 拡張機能をロードする前に、Babelfish DB クラスターに必要な権限を付与します。

次の手順では、`psql` PostgreSQL コマンドラインツールを使用して DB クラスターに接続します。詳しくは、「[psql を使用したクラスターへの接続](babelfish-connect-PostgreSQL.md#babelfish-connect-psql)」を参照してください。pgAdmin を使用することもできます。詳細については、「[pgAdmin を使用した DB クラスターへの接続](babelfish-connect-PostgreSQL.md#babelfish-connect-pgadmin)」を参照してください。

この手順では、`aws_s3` と `aws_lambda` の両方を順次ロードします。これらの拡張機能のうちの 1 つだけを使用する場合は、両方をロードする必要はありません。どちらにも `aws_commons` 拡張機能が必要で、これは出力に示すようにデフォルトでロードされます。

**Aurora PostgreSQL 拡張機能の権限で Babelfish DB クラスターをセットアップするには**

1. Babelfish DB クラスターに接続します。Babelfish DB クラスターの作成時に指定した「マスター」ユーザー (-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:
   ```

   DB クラスターのユーザー名 (-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=>
   ```

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

Babelfish DB クラスターで使用する Amazon S3 バケットをまだ持っていない場合は、作成できます。使用するすべての Amazon S3 バケットに対して、アクセスを提供します。

Amazon S3 バケットを使用してデータをインポートまたはエクスポートする前に、次の 1 回限りの手順を完了してください。

**Amazon S3 バケットへの Babelfish DB インスタンスのアクセスを設定するには**

1. 必要に応じて、Babelfish インスタンス用の Amazon S3 バケットを作成します。これを行うには、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.htmlurl-s3-user;GetStartedWithS3.html#creating-bucket)」の手順に従います。

1. ファイルを Amazon S3 バケットにアップロードします。これを行うには、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットにオブジェクトをアップロードする](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.htmlurl-s3-user;GetStartedWithS3.html#uploading-an-object-bucket)」の手順に従います。

1. 必要に応じてアクセス許可を次のように設定します。
   + Amazon S3 からデータをインポートするには、Babelfish DB クラスターにバケットへのアクセス許可が必要です。AWS Identity and Access Management (IAM) ロールを使用し、クラスターのそのロールに IAM ポリシーをアタッチすることをお勧めします。これを行うには、「[IAM ロールを使用した Amazon S3 バケットへのアクセス](USER_PostgreSQL.S3Import.AccessPermission.md#USER_PostgreSQL.S3Import.ARNRole)」の手順を実行します。
   + Babelfish DB クラスターからデータをエクスポートするには、クラスターに Amazon S3 バケットへのアクセス権が付与されている必要があります。インポートの場合と同様に、IAM ロールとポリシーを使用することをお勧めします。これを行うには、「[Amazon S3 バケットへのアクセスを設定する](postgresql-s3-export-access-bucket.md)」の手順を実行します。

`aws_s3` 拡張機能がある Amazon S3 を Babelfish DB クラスターで使用できるようになりました。

**Amazon S3 から Babelfish にデータをインポートし、Babelfish データを Amazon S3 にエクスポートするには**

1. Babelfish DB クラスターで `aws_s3` 拡張機能を使用します。

   その場合、PostgreSQL のコンテキスト内に存在するテーブルを参照するようにしてください。つまり、`[database].[schema].[tableA]` という名前の Babelfish テーブルにインポートする場合、そのテーブルを `aws_s3` 関数の `database_schema_tableA` として参照してください。
   + データをインポートする `aws_s3` 関数の使用例については「[Amazon S3 から Aurora PostgreSQL DB クラスター にデータをインポートする](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` | 

Aurora PostgreSQL での Amazon S3 の使用の詳細については、「[Amazon S3 から Aurora PostgreSQL DB クラスター にデータをインポートする](USER_PostgreSQL.S3Import.md)」および「[Aurora PostgreSQL DB クラスターから Amazon S3 へのデータのエクスポート](postgresql-s3-export.md)」を参照してください。

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

`aws_lambda` 拡張機能が Babelfish DB クラスターにロードされても、Lambda 関数の呼び出しができるようにするには、この手順に従って DB クラスターへの Lambda アクセスを許可する必要があります。

**Babelfish DB クラスターが Lambda で動作するようにアクセスを設定するには**

この手順では、AWS CLI を使用して、IAM ポリシーとロールを作成し、これらを Babelfish DB クラスターに関連付けます。

1. Babelfish DB クラスターから 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 DB クラスターにアタッチします。

   ```
   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 DB クラスターへの AWS Lambda の設定の詳細と例については、「[ステップ 2: Aurora PostgreSQL DB クラスター および AWS Lambda のために IAM を設定する](PostgreSQL-Lambda.md#PostgreSQL-Lambda-access)」を参照してください。

**Babelfish DB クラスターから Lambda 関数を呼び出すには**

AWS Lambda は、Java、Node.js、Python、Ruby、および他の言語で書かれた関数をサポートしています。関数が呼び出されたときにテキストを返す場合は、Babelfish DB クラスターから呼び出すことができます。次の例は、挨拶を返すプレースホルダー 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 DB クラスターに接続します。詳しくは、「[psql を使用したクラスターへの接続](babelfish-connect-PostgreSQL.md#babelfish-connect-psql)」を参照してください。

1. ラッパーを作成します。この例では、PostgreSQL の手続き言語を SQL、`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 クライアントを使用した DB クラスターへの接続](babelfish-connect-sqlserver.md)」を参照してください。接続したら、以下を実行します。

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

      このコマンドにより、以下のような出力が返されます。

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

Aurora PostgreSQL での Lambda の使用の詳細については、「[Aurora PostgreSQL DB クラスターから 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` を有効にするには、クエリ ID 計算を有効にする必要があります。`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>
+ 現在、`pg_stat_statements()` は T-SQL エンドポイントではサポートされていません。`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 ステートメントでは、クエリとクエリ ID は表示されません。権限が不十分だと表示されます。
+ `pg_stat_statements` ビューには常に以下の 2 つのエントリが含まれます。これらは `sqlcmd` クライアントによって内部的に実行されるからです。
  + SET QUOTED\$1IDENTIFIER OFF
  + SET TEXTSIZE 4,096

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

オープンソースの拡張機能である pgvector を使用すると、Postgres データベース内で同様のデータを直接検索できます。Babelfish は、バージョン 15.6 および 16.2 以降、この拡張機能をサポートするようになりました。詳細については、「[pgvector Open source Documentation](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';
  ```
+ psql クライアントで次のコマンドを実行して、`babelfish_db` に接続して実行します。

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

**注記**  
pgvector 拡張機能をインストールした後、ベクトルデータ型は、確立した新しいデータベース接続でのみ使用できます。既存の接続では、新しいデータ型は認識されません。

### サポートされている機能
<a name="babelfish-postgres-aws-extensions-using-pgvector-supported"></a>

Babelfish は T-SQL 機能を拡張して、以下をサポートします。
+ **保存**

  Babelfish はベクトルデータ型互換構文をサポートするようになり、T-SQL の互換性が強化されました。pgvector を使用したデータの保存の詳細については、「[Storing](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 を使用したデータのクエリの詳細については、「[Querying](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 を使用したデータのインデックス作成の詳細については、「[Indexing](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 のパフォーマンスを向上させるには、「[Performance](https://github.com/pgvector/pgvector?tab=readme-ov-file#performance)」を参照してください。

### 制限事項
<a name="babelfish-postgres-aws-extensions-using-pgvector-unsupported"></a>
+ Babelfish は、ハイブリッド検索の全文検索をサポートしていません。詳細については、「[Hybrid Search](https://github.com/pgvector/pgvector?tab=readme-ov-file#hybrid-search)」を参照してください。
+ Babelfish は現在、インデックスの再作成機能をサポートしていません。ただし、PostgreSQL エンドポイントを使用してインデックスを再作成することはできます。詳細については、「[Vacuuming](https://github.com/pgvector/pgvector?tab=readme-ov-file#vacuuming)」を参照してください。

## Babelfish での Amazon Aurora 機械学習の使用
<a name="babelfish-postgres-aws-extensions-using-ml"></a>

Amazon Aurora の機械学習と統合することで、Babelfish for Aurora PostgreSQL DB クラスターの機能を拡張できます。このシームレスな統合により、Amazon Comprehend、Amazon SageMaker AI、Amazon Bedrock などのさまざまな強力なサービスにアクセスできます。それぞれのサービスは、個別の機械学習ニーズに対応するようにカスタマイズされています。

Babelfish のユーザーは、Aurora の機械学習を使用する際に T-SQL 構文とセマンティクスに関する既存の知識を使用できます。Aurora PostgreSQL の AWS ドキュメントに記載されている手順に従ってください。詳細については、「[Aurora PostgreSQL で Amazon Aurora 機械学習を使用する](postgresql-ml.md)」を参照してください。

### 前提条件
<a name="babelfish-postgres-aws-extensions-using-ml-prereq"></a>
+ Babelfish for Aurora PostgreSQL DB クラスターを設定して Aurora 機械学習の使用を開始する前に、関連する要件と前提条件を確認してください。詳細については、「[Aurora 機械学習 を 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 としてマークされ、型が「any」であるため、ユーザーは任意の長さと任意のデータ型のリストをモデルへの入力として機能する関数に渡すことができます。次の例は、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 機械学習の詳細については、「[Aurora PostgreSQL で Amazon Aurora 機械学習を使用する](postgresql-ml.md)」を参照してください。

### 制限事項
<a name="babelfish-postgres-aws-extensions-using-ml-limit"></a>
+ Babelfish では配列の作成を行えませんが、配列を表すデータは処理することができます。配列を返す `aws_bedrock.invoke_model_get_embeddings` のような関数を使用すると、結果は配列要素を含む文字列として返されます。