Mengekstrak data terstruktur

Fungsi ai.extract adalah alat AlloyDB AI bawaan yang mengekstrak detail terstruktur yang ditentukan dari teks tidak terstruktur berdasarkan skema yang disediakan. Dengan menyematkan kemampuan ini langsung ke dalam database, AlloyDB untuk PostgreSQL memungkinkan Anda memproses data tidak terstruktur tanpa membangun pipeline Extract, Transform, and Load (ETL) yang kompleks atau integrasi layanan eksternal.

Fungsi ekstraksi data memberikan manfaat berikut:

  • Skalabilitas: mendukung pengelompokan cerdas untuk fungsi AI —juga disebut sebagai akselerasi fungsi AI—yang merupakan fitur pengoptimalan eksekusi kueri otomatis di AlloyDB AI yang secara transparan mengelompokkan panggilan fungsi AI skalar baris demi baris ke dalam permintaan model batch di latar belakang selama eksekusi kueri. Juga mendukung pemrosesan berbasis array dan berbasis kursor untuk memproses ribuan baris secara efisien.
  • Abstraksi: menyediakan abstraksi tingkat tinggi yang mengelola pemanggilan model dan persiapan data secara otomatis.

Fungsi ekstraksi data AlloyDB AI mendukung beberapa kasus penggunaan, termasuk berikut ini:

  • Layanan kesehatan: mengurai catatan medis teks bebas ke dalam kolom format terstruktur seperti nama pasien, gejala, dan pengobatan.
  • Real estate: mengubah deskripsi properti yang tidak terstruktur menjadi titik data tertentu seperti jenis properti dan jumlah kamar tidur.
  • Teknologi hukum: mengidentifikasi dan mengambil istilah penting secara otomatis seperti hukum yang mengatur dan batas kewajiban dari dokumen hukum panjang.
  • Operasi keuangan: memproses teks invoice yang ditranskripsikan untuk mengekstrak metadata dan jumlah total secara akurat ke dalam format yang konsisten.

Sebelum memulai

Pastikan Anda memenuhi persyaratan berikut sebelum menggunakan fungsi ai.extract:

  • Versi PostgreSQL: Fungsi ai.extract didukung di PostgreSQL versi 18 dan yang lebih baru. Pastikan cluster AlloyDB Anda menjalankan PostgreSQL 18 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Versi database yang didukung.
  • Versi ekstensi: Pastikan Anda telah menginstal ekstensi google_ml_integration versi terbaru (versi 1.6.1 atau yang lebih tinggi) dengan fungsi Pratinjau diaktifkan.

Mengaktifkan ekstensi

Pastikan Anda telah menginstal ekstensi google_ml_integration versi terbaru (versi 1.6.1 atau yang lebih tinggi) dengan fungsi Pratinjau diaktifkan.

Untuk mengaktifkan flag google_ml_integration.enable_ai_query_engine dan google_ml_integration.enable_preview_ai_functions di AlloyDB, gunakan perintah SET. Flag ini mengontrol akses ke mesin kueri AI dan fungsi AI pratinjau seperti ai.extract. Nilai default flag ini adalah off.

  1. Pastikan ekstensi google_ml_integration Anda adalah versi 1.6.1 atau yang lebih tinggi. Periksa versi dengan menjalankan perintah berikut:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    
  2. Untuk mengaktifkan flag untuk sesi Anda saat ini, seluruh database, atau semua database pada instance, lakukan satu atau beberapa tugas berikut:

    • Untuk mengaktifkan flag untuk sesi Anda saat ini, jalankan perintah berikut:

      SET google_ml_integration.enable_ai_query_engine = 'on';
      SET google_ml_integration.enable_preview_ai_functions = 'on';
      

      Perubahan ini tidak memerlukan mulai ulang database.

    • Untuk mengaktifkan flag secara persisten untuk database tertentu, jalankan perintah berikut:

      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';
      
    • Untuk mengaktifkan flag bagi semua database di instance, tetapkan flag database google_ml_integration.enable_ai_query_engine dan google_ml_integration.enable_preview_ai_functions ke on menggunakan perintah gcloud alloydb instances update:

      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

      Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database.

Mengaktifkan pengelompokan cerdas untuk fungsi AI

Untuk mencapai total waktu eksekusi kueri yang lebih cepat saat Anda menjalankan ai.extract skalar di beberapa baris, aktifkan pengelompokan cerdas untuk fungsi AI dengan menetapkan flag database google_ml_integration.enable_ai_function_acceleration ke on:

SET google_ml_integration.enable_ai_function_acceleration = 'on';

Jika flag ini diaktifkan, AlloyDB akan otomatis mengelompokkan panggilan ai.extract skalar individual ke dalam batch cerdas di latar belakang.

Membuat tabel contoh

Untuk mengikuti contoh fungsi extract dalam dokumen ini, buat tabel dan isi dengan contoh data berikut.

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');

Mengekstrak data terstruktur dari satu string

Untuk mengekstrak detail terstruktur dari satu input teks, gunakan versi skalar ai.extract. Untuk informasi selengkapnya, lihat referensi 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.
);

Mengekstrak data dari tabel

Contoh berikut mengekstrak informasi terstruktur dari kolom tabel 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';

Mengekstrak kolom berdasarkan skema JSON yang disediakan

Contoh berikut mengekstrak kolom tertentu dari teks input berdasarkan skema JSON yang disediakan:

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"}}'
);

Berikut adalah contoh output:

{
  "contact_name": "Alex R.",
  "job_title": "Director of IT",
  "company_name": "Example Organization",
  "need": "upgrade cloud storage"
}

Mengekstrak kolom berdasarkan perintah bahasa alami

Contoh berikut mengekstrak detail prospek penjualan menggunakan skema teks deskriptif:

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.'
);

Berikut adalah contoh output:

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

Mengekstrak kolom dengan array

Contoh berikut mengekstrak beberapa nilai ke dalam kolom array berdasarkan skema output:

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"}}}'
);

Berikut adalah contoh output:

{
  "contact_name": "Kai L.",
  "company_name": "Example Organization",
  "current_technologies": ["MySQL", "Redis"],
  "interested_features": ["enterprise database backups", "cross-region replication", "automated scaling"]
}

Mengekstrak data terstruktur dalam batch

Untuk mencapai total waktu eksekusi kueri yang lebih cepat pada set data yang lebih besar, gunakan versi fungsi berbasis array untuk memproses beberapa input dalam satu panggilan. Untuk informasi selengkapnya, lihat referensi 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.
);

Contoh berikut mengekstrak detail terstruktur dari beberapa data:

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;

Mengekstrak data terstruktur menggunakan kursor

Fungsi berbasis kursor sangat cocok untuk memproses set data besar, karena memungkinkan sistem melakukan streaming data melalui model AI dalam batch yang dapat dikelola tanpa mengharuskan semua data dimuat ke dalam memori sekaligus. Untuk informasi selengkapnya, lihat referensi ai.extract.

Tanda tangan fungsi untuk versi ai.extract berbasis kursor adalah sebagai berikut:

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

Contoh berikut menunjukkan cara memasukkan data ke fungsi ai.extract baris demi baris menggunakan kursor:

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 $$;

Langkah berikutnya