Menangani error kuota dengan memanggil ML.GENERATE_TEXT secara berulang

Prosedur tersimpan publik bqutil.procedure.bqml_generate_text BigQuery memungkinkan Anda melakukan iterasi melalui panggilan batch ke fungsi ML.GENERATE_TEXT sehingga Anda dapat memproses set data besar tanpa melebihi kuota dan batas endpoint. Karena tugas kueri BigQuery selesai bahkan saat fungsi gagal pada baris individual, volume permintaan yang tinggi dapat menyebabkan error RESOURCE EXHAUSTED yang dapat dicoba lagi di tabel output Anda. Dalam tutorial ini, Anda akan membuat model jarak jauh dan menjalankan prosedur tersimpan untuk mencoba ulang baris yang gagal secara berulang hingga semua data dalam set data berita publik diproses.

Untuk meninjau kode sumber prosedur tersimpan di GitHub, lihat bqml_generate_text.sqlx. Untuk mengetahui informasi selengkapnya tentang parameter dan penggunaan prosedur tersimpan, lihat file README.

Tujuan

  • Membuat set data BigQuery.
  • Buat model jarak jauh BigQuery ML melalui model gemini-3.5-flash-lite.
  • Jalankan prosedur tersimpan bqutil.procedure.bqml_generate_text untuk membuat teks secara iteratif dari set data publik bigquery-public-data.bbc_news.fulltext.
  • Verifikasi hasil teks yang dihasilkan dan pastikan tidak ada lagi error kuota yang dapat dicoba ulang.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Gemini Enterprise Agent Platform: You incur costs for calls to the Agent Platform model.

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk mengetahui informasi selengkapnya, lihat Harga BigQuery dan Harga Agent Platform.

Sebelum memulai

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Aktifkan BigQuery API, BigQuery Connection API, dan Agent Platform API, jika belum diaktifkan.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    Aktifkan API

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator untuk memberi Anda peran IAM berikut:

  • Membuat dan menggunakan set data, koneksi, dan model BigQuery: BigQuery Admin (roles/bigquery.admin) di project Anda
  • Berikan izin ke akun layanan koneksi: Project IAM Admin (roles/resourcemanager.projectIamAdmin) pada project Anda

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk menyelesaikan tutorial ini. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menyelesaikan tutorial ini:

  • Membuat set data: bigquery.datasets.create
  • Membuat, mendelegasikan, dan menggunakan koneksi: bigquery.connections.*
  • Tetapkan koneksi default: bigquery.config.*
  • Tetapkan izin akun layanan:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • Membuat model dan menjalankan inferensi:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Membuat set data

Untuk membuat set data BigQuery, pilih salah satu opsi berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di panel kiri, klik Explorer:

    Tombol yang ditandai untuk panel Explorer.

    Jika Anda tidak melihat panel kiri, klik Luaskan panel kiri untuk membuka panel.

  3. Di Explorer, luaskan project Anda, lalu klik Datasets.

  4. Di halaman Datasets, klik Create dataset.

  5. Di panel Create dataset, lakukan hal berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk lokasi data, pilih US.

    Jangan ubah setelan default yang tersisa.

  6. Klik Create dataset.

bq

Untuk membuat set data baru, gunakan perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data yang ditetapkan ke US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Pastikan set data telah dibuat:

    bq ls

API

Panggil metode datasets.insert dengan resource set data yang ditentukan:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Membuat model jarak jauh

Gunakan pernyataan CREATE MODEL untuk membuat model jarak jauh yang merepresentasikan model gemini-3.5-flash-lite Agent Platform yang dihosting:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

    CREATE OR REPLACE MODEL `bqml_tutorial.generate_text`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'gemini-3.5-flash-lite');

    Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model generate_text akan muncul di set data bqml_tutorial di panel Explorer. Karena kueri menggunakan pernyataan CREATE MODEL untuk membuat model, tidak akan ada hasil kueri.

Menjalankan prosedur tersimpan

Gunakan pernyataan CALL untuk menjalankan prosedur tersimpan bqutil.procedure.bqml_generate_text. Prosedur tersimpan ini melakukan iterasi melalui panggilan ke fungsi ML.GENERATE_TEXT menggunakan model bqml_tutorial.generate_text dan tabel publik bigquery-public-data.bbc_news.fulltext:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

    CALL `bqutil.procedure.bqml_generate_text`(
        "bigquery-public-data.bbc_news.fulltext",          -- source table
        "PROJECT_ID.bqml_tutorial.news_generated_text",  -- destination table
        "PROJECT_ID.bqml_tutorial.generate_text",        -- model
        "body",                                            -- prompt column
        ["filename"],                                      -- key columns
        '{"flatten_json_output": true}'                    -- optional arguments
    );

    Ganti PROJECT_ID dengan project ID Anda.

    Prosedur tersimpan membuat tabel bqml_tutorial.news_generated_text untuk memuat output fungsi ML.GENERATE_TEXT.

  3. Setelah kueri selesai berjalan, pastikan tidak ada baris dalam tabel bqml_tutorial.news_generated_text yang berisi error yang dapat dicoba lagi. Di editor kueri, jalankan pernyataan berikut:

    SELECT *
    FROM `bqml_tutorial.news_generated_text`
    WHERE ml_generate_text_status LIKE '%A retryable error occurred%';

    Kueri akan menampilkan pesan There is no data to display.

  4. Di editor kueri, jalankan pernyataan berikut untuk memeriksa sampel hasil teks yang dihasilkan:

    SELECT
      filename,
      prompt,
      ml_generate_text_llm_result,
      ml_generate_text_status
    FROM `bqml_tutorial.news_generated_text`
    LIMIT 3;

    Outputnya mirip dengan hal berikut ini:

    +------------------------+------------------------------------------+-----------------------------------------------------------+-------------------------+
    | filename               | prompt                                   | ml_generate_text_llm_result                               | ml_generate_text_status |
    +------------------------+------------------------------------------+-----------------------------------------------------------+-------------------------+
    | bbc/tech/209.txt       | A 20-year-old US man is selling...       | It looks like you shared a news article about Andrew...   |                         |
    | bbc/business/375.txt   | South Korea's largest credit card...     | It looks like you shared a news article about the 2004... |                         |
    | bbc/sport/139.txt      | A brave defensive display, led by...     | It looks like you have shared a match report from a...    |                         |
    +------------------------+------------------------------------------+-----------------------------------------------------------+-------------------------+
    

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus Google Cloud project:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

Jika Anda ingin menggunakan kembali project tersebut, hapus resource yang Anda buat untuk tutorial ini:

Konsol

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Hapus set data bqml_tutorial. Menghapus set data juga akan menghapus model jarak jauh dan tabel output:

    1. Di panel Explorer, luaskan project Anda dan klik Datasets.

    2. Dalam daftar Set data, klik set data bqml_tutorial.

    3. Di panel detail, klik Delete.

    4. Pada dialog Delete dataset, klik Delete.

bq

Hapus set data bqml_tutorial, model jarak jauh, dan tabel output:

bq rm --dataset --recursive bqml_tutorial

Langkah berikutnya