ai.extract 関数は、指定されたスキーマに基づいて非構造化テキストから指定された構造化詳細を抽出する組み込みの AlloyDB AI ツールです。この機能をデータベースに直接埋め込むことで、AlloyDB for PostgreSQL では、複雑な抽出、変換、読み込み(ETL)パイプラインや外部サービス統合を構築することなく、非構造化データを処理できます。
データ抽出機能には次の利点があります。
- スケーラビリティ: AI 関数のスマートバッチ処理(AI 関数アクセラレーションとも呼ばれます)をサポートしています。これは、AlloyDB AI の自動クエリ実行最適化機能です。クエリ実行中に、個々の行単位のスカラー AI 関数呼び出しをバックグラウンドでバッチモデル リクエストに透過的にグループ化します。また、配列ベースとカーソルベースの処理をサポートしているため、数千行を効率的に処理できます。
- 抽象化: モデルの呼び出しとデータの準備を自動的に管理する高レベルの抽象化を提供します。
AlloyDB AI のデータ抽出関数は、次のようなさまざまなユースケースをサポートしています。
- 医療: 自由形式の医療メモを、患者名、症状、投薬などの構造化された形式のフィールドに解析します。
- 不動産: 構造化されていない物件の説明を、物件タイプや寝室数などの特定のデータポイントに変換します。
- 法務テクノロジー: 長文の法務文書から、準拠法や損害賠償の制限などの重要な用語を自動的に特定して抽出します。
- 財務オペレーション: 音声文字変換された請求書テキストを処理して、メタデータと合計金額を正確に抽出し、一貫した形式に変換します。
始める前に
ai.extract 関数を使用する前に、次の要件を満たしていることを確認してください。
- PostgreSQL のバージョン:
ai.extract関数は、PostgreSQL バージョン 18 以降でサポートされています。AlloyDB クラスタで PostgreSQL 18 以降が実行されていることを確認します。詳細については、サポートされているデータベースのバージョンをご覧ください。 - 拡張機能のバージョン:
google_ml_integration拡張機能の最新バージョン(バージョン1.6.1以降)がインストールされ、プレビュー機能が有効になっていることを確認します。
拡張機能を有効にする
google_ml_integration 拡張機能の最新バージョン(バージョン 1.6.1 以降)がインストールされ、プレビュー機能が有効になっていることを確認します。
AlloyDB で google_ml_integration.enable_ai_query_engine フラグと google_ml_integration.enable_preview_ai_functions フラグを有効にするには、SET コマンドを使用します。これらのフラグは、AI クエリエンジンと ai.extract などのプレビュー AI 関数へのアクセスを制御します。これらのフラグのデフォルト値は off です。
google_ml_integration拡張機能のバージョンが1.6.1以降であることを確認します。次のコマンドを実行して、バージョンを確認します。SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';現在のセッション、データベース全体、またはインスタンス上のすべてのデータベースでフラグを有効にするには、次のタスクを 1 つ以上実行します。
現在のセッションでフラグを有効にするには、次のコマンドを実行します。
SET google_ml_integration.enable_ai_query_engine = 'on'; SET google_ml_integration.enable_preview_ai_functions = 'on';この変更により、データベースの再起動は必要ありません。
特定のデータベースでフラグを永続的に有効にするには、次のコマンドを実行します。
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on'; ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_preview_ai_functions = 'on';インスタンス上のすべてのデータベースでフラグを有効にするには、
gcloud alloydb instances updateコマンドを使用して、google_ml_integration.enable_ai_query_engineデータベース フラグとgoogle_ml_integration.enable_preview_ai_functionsデータベース フラグをonに設定します。gcloud alloydb instances update INSTANCE_ID --database-flags google_ml_integration.enable_ai_query_engine=on,google_ml_integration.enable_preview_ai_functions=on --region=REGION_ID --cluster=CLUSTER_ID --project=PROJECT_ID詳細については、データベース フラグを構成するをご覧ください。
AI 関数のスマートバッチ処理を有効にする
複数の行にわたってスカラー ai.extract を実行するときに、クエリの合計実行時間を短縮するには、google_ml_integration.enable_ai_function_acceleration データベース フラグを on に設定して、AI 関数のスマート バッチ処理を有効にします。
SET google_ml_integration.enable_ai_function_acceleration = 'on';
このフラグを有効にすると、AlloyDB はバックグラウンドで個々のスカラー ai.extract 呼び出しをスマート バッチに自動的にグループ化します。
サンプル テーブルを作成する
このドキュメントの抽出関数の例に沿って、テーブルを作成し、次のサンプルデータを入力します。
CREATE TABLE IF NOT EXISTS sales_leads (
lead_id INT PRIMARY KEY,
raw_transcript TEXT,
lead_status VARCHAR(20)
);
INSERT INTO sales_leads (lead_id, raw_transcript, lead_status) VALUES
(1, 'Spoke with Alex R., Director of IT at Example Organization. They are looking to upgrade their cloud storage.', 'new'),
(2, 'Call with Kai L., Senior DevOps Engineer at Example Organization. They are currently using MySQL and Redis. Interested in automating enterprise database backups, cross-region replication, and automated scaling.', 'new'),
(3, 'Meeting with Taylor K., VP of Engineering at Example Organization. They need a scalable managed PostgreSQL database for their analytics platform. Budget is approved for Q3 launch.', 'new');
単一の文字列から構造化データを抽出する
単一のテキスト入力から構造化された詳細を抽出するには、ai.extract のスカラー バージョンを使用します。詳細については、ai.extract リファレンスをご覧ください。
SELECT ai.extract(
input => 'TEXT_CONTENT',
output_schema => 'OUTPUT_SCHEMA',
model_id => 'MODEL_ID' -- Optional. The default value is gemini-3.5-flash-lite.
);
テーブルからデータを抽出する
次の例では、raw_transcript テーブル列から構造化情報を抽出します。
SELECT
lead_id,
ai.extract(
input => raw_transcript,
output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "job_title": {"type": "string"}}'
) AS extracted_info
FROM
sales_leads
WHERE
lead_status = 'new';
提供された JSON スキーマに基づいてフィールドを抽出する
次の例では、指定された JSON スキーマに基づいて、入力テキストから特定のフィールドを抽出します。
SELECT ai.extract(
input => 'Spoke with Alex R., Director of IT at Example Organization. They are looking to upgrade their cloud storage.',
output_schema => '{"contact_name": {"type": "string"}, "job_title": {"type": "string"}, "company_name": {"type": "string"}, "need": {"type": "string"}}'
);
出力例を次に示します。
{
"contact_name": "Alex R.",
"job_title": "Director of IT",
"company_name": "Example Organization",
"need": "upgrade cloud storage"
}
自然言語プロンプトに基づいてフィールドを抽出する
次の例では、説明テキスト スキーマを使用して見込み顧客の詳細を抽出します。
SELECT ai.extract(
input => 'Meeting with Taylor K., VP of Engineering at Example Organization. They need a scalable managed PostgreSQL database for their analytics platform. Budget is approved for Q3 launch.',
output_schema => 'Extract the following details as a clean, line-by-line list: Contact Name, Job Title, Company Name, Technical Requirement, Target Use Case, and Timeline.'
);
出力例を次に示します。
Contact Name: Taylor K.
Job Title: VP of Engineering
Company Name: Example Organization
Technical Requirement: Scalable managed PostgreSQL database
Target Use Case: Analytics platform
Timeline: Q3 launch
配列を含むフィールドを抽出する
次の例では、出力スキーマに基づいて複数の値を配列フィールドに抽出します。
SELECT ai.extract(
input => 'Call with Kai L., Senior DevOps Engineer at Example Organization. They are currently using MySQL and Redis. Interested in automating enterprise database backups, cross-region replication, and automated scaling.',
output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "current_technologies": {"type": "array", "items": {"type": "string"}}, "interested_features": {"type": "array", "items": {"type": "string"}}}'
);
出力例を次に示します。
{
"contact_name": "Kai L.",
"company_name": "Example Organization",
"current_technologies": ["MySQL", "Redis"],
"interested_features": ["enterprise database backups", "cross-region replication", "automated scaling"]
}
構造化データをバッチで抽出する
大規模なデータセットでクエリの合計実行時間を短縮するには、配列ベースの関数を使用して、1 回の呼び出しで複数の入力を処理します。詳細については、ai.extract リファレンスをご覧ください。
SELECT ai.extract(
inputs => TEXT[],
output_schema => TEXT,
batch_size => INT, -- Optional. The default value is 10.
model_id => VARCHAR(100) -- Optional. The default value is gemini-3.5-flash-lite.
);
次の例では、複数のレコードから構造化された詳細を抽出します。
SELECT
ai.extract(
inputs => array_agg(raw_transcript ORDER BY lead_id),
output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "job_title": {"type": "string"}}',
batch_size => 4
)
FROM sales_leads;
カーソルを使用して構造化データを抽出する
カーソルベースの関数は、大規模なデータセットの処理に適しています。この関数を使用すると、すべてのデータを一度にメモリに読み込むことなく、管理可能なバッチで AI モデルを介してデータをストリーミングできます。詳細については、ai.extract リファレンスをご覧ください。
カーソルベースの ai.extract の関数シグネチャは次のとおりです。
CREATE OR REPLACE FUNCTION ai.extract(
input_cursor REFCURSOR,
output_schema TEXT,
batch_size INT DEFAULT NULL,
model_id VARCHAR(100) DEFAULT NULL)
RETURNS REFCURSOR
次の例は、カーソルを使用して ai.extract 関数に行ごとにデータをフィードする方法を示しています。
DO $$
DECLARE
input_cur REFCURSOR;
output_cur REFCURSOR;
result_record RECORD;
BEGIN
-- Open the input cursor with the data to process
OPEN input_cur FOR
SELECT raw_transcript
FROM sales_leads
WHERE lead_status = 'new';
-- Call ai.extract passing the input cursor
output_cur := ai.extract(
input_cursor => input_cur,
output_schema => '{"contact_name": "string", "company_name": "string", "job_title": "string"}',
batch_size => 10
);
-- Loop through the output cursor (columns: input TEXT, output TEXT)
LOOP
FETCH output_cur INTO result_record;
EXIT WHEN NOT FOUND;
RAISE NOTICE 'Extracted Data: %', result_record.output;
END LOOP;
CLOSE input_cur;
CLOSE output_cur;
END $$;