ML.GENERATE_TEXT를 반복적으로 호출하여 할당량 오류 처리

BigQuery bqutil.procedure.bqml_generate_text 공개 저장 프로시저를 사용하면 ML.GENERATE_TEXT 함수에 대한 일괄 호출을 반복하여 엔드포인트 할당량 및 한도를 초과하지 않고 대규모 데이터 세트를 처리할 수 있습니다. 개별 행에서 함수가 실패하더라도 BigQuery 쿼리 작업이 완료되므로 요청량이 많으면 출력 테이블에 RESOURCE EXHAUSTED 재시도 가능 오류가 남을 수 있습니다. 이 튜토리얼에서는 원격 모델을 만들고 저장 프로시져를 실행하여 공개 뉴스 데이터 세트의 모든 레코드가 처리될 때까지 실패한 행을 반복적으로 재시도합니다.

GitHub에서 저장 프러시저의 소스 코드를 검토하려면 bqml_generate_text.sqlx를 참조하세요. 저장 프러시저 매개변수 및 사용에 대한 자세한 내용은 리드미 파일을 참조하세요.

목표

  • BigQuery 데이터 세트를 만듭니다.
  • gemini-3.5-flash-lite 모델을 통해 BigQuery ML 원격 모델을 만듭니다.
  • bqutil.procedure.bqml_generate_text 저장 프로시저를 실행하여 bigquery-public-data.bbc_news.fulltext 공개 데이터 세트에서 텍스트를 반복적으로 생성합니다.
  • 생성된 텍스트 결과를 확인하고 재시도 가능한 할당량 오류가 남아 있지 않은지 확인합니다.

비용

이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소를 사용합니다.

  • 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.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.

Google Cloud 신규 사용자는 무료 체험판을 사용할 수 있습니다.

자세한 내용은 BigQuery 가격 책정 및 에이전트 플랫폼 가격 책정을 참조하세요.

시작하기 전에

  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. BigQuery, BigQuery Connection, Agent Platform API가 아직 사용 설정되지 않은 경우 사용 설정합니다.

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할(roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않으면 서비스 사용량 관리자 역할(roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할 부여 방법 알아보기

    API 사용 설정

필요한 역할

이 튜토리얼을 완료하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.

  • BigQuery 데이터 세트, 연결, 모델 만들기 및 사용: 프로젝트의 BigQuery 관리자(roles/bigquery.admin)
  • 연결의 서비스 계정에 권한 부여: 프로젝트에 대한 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin)

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 이 튜토리얼을 완료하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

이 튜토리얼을 완료하려면 다음 권한이 필요합니다.

  • 데이터 세트 만들기: bigquery.datasets.create
  • 연결을 만들고, 위임하고, 사용하기: bigquery.connections.*
  • 기본 연결 설정: bigquery.config.*
  • 서비스 계정 권한 설정:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • 모델을 만들고 추론을 실행하기:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

데이터 세트 만들기

BigQuery 데이터 세트를 만들려면 다음 옵션 중 하나를 선택합니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 왼쪽 창에서 탐색기를 클릭합니다.

    강조 표시된 탐색기 창 버튼

    왼쪽 창이 표시되지 않으면 왼쪽 창 펼치기를 클릭하여 창을 엽니다.

  3. 탐색기에서 프로젝트를 펼친 후 데이터 세트를 클릭합니다.

  4. 데이터 세트 페이지에서 데이터 세트 만들기를 클릭합니다.

  5. 데이터 세트 만들기 창에서 다음을 수행합니다.

    • 데이터 세트 ID에 bqml_tutorial를 입력합니다.

    • 데이터 위치로 미국을 선택합니다.

    나머지 기본 설정은 그대로 둡니다.

  6. 데이터 세트 만들기를 클릭합니다.

bq

새 데이터 세트를 만들려면 bq mk --dataset 명령어를 사용합니다.

  1. 데이터 위치가 US로 설정된 bqml_tutorial 데이터 세트를 만듭니다.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. 데이터 세트가 생성되었는지 확인합니다.

    bq ls

API

데이터 세트 리소스가 정의된 datasets.insert 메서드를 호출합니다.

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

원격 모델 만들기

CREATE MODEL 문을 사용하여 호스팅된 Agent Platform gemini-3.5-flash-lite 모델을 나타내는 원격 모델을 만듭니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 쿼리를 실행합니다.

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

    쿼리가 완료되는 데 몇 초 정도 걸리며 그 이후에는 generate_text 모델이 탐색기 창의 bqml_tutorial 데이터 세트에 표시됩니다. 이 쿼리에서는 CREATE MODEL 문을 사용하여 모델을 만들므로 쿼리 결과가 없습니다.

저장 프러시저 실행

CALL 문을 사용하여 bqutil.procedure.bqml_generate_text 저장 프로시저를 실행합니다. 이 저장 프로시저는 bqml_tutorial.generate_text 모델과 bigquery-public-data.bbc_news.fulltext 공개 테이블을 사용하여 ML.GENERATE_TEXT 함수 호출을 반복합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 쿼리를 실행합니다.

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

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

    저장 프로시저는 ML.GENERATE_TEXT 함수의 출력을 포함하는 bqml_tutorial.news_generated_text 테이블을 만듭니다.

  3. 쿼리 실행이 완료되면 bqml_tutorial.news_generated_text 테이블에 재시도 가능한 오류가 포함된 행이 없는지 확인합니다. 쿼리 편집기에서 다음 문을 실행합니다.

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

    쿼리가 There is no data to display 메시지를 반환합니다.

  4. 쿼리 편집기에서 다음 문을 실행하여 생성된 텍스트 결과의 샘플을 검사합니다.

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

    출력은 다음과 비슷합니다.

    +------------------------+------------------------------------------+-----------------------------------------------------------+-------------------------+
    | 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...    |                         |
    +------------------------+------------------------------------------+-----------------------------------------------------------+-------------------------+
    

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

    Google Cloud 프로젝트 삭제:

    gcloud projects delete PROJECT_ID

개별 리소스 삭제

프로젝트를 재사용하려면 이 튜토리얼에서 만든 리소스를 삭제합니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. bqml_tutorial 데이터 세트를 삭제합니다. 데이터 세트를 삭제하면 원격 모델과 출력 테이블도 삭제됩니다.

    1. 탐색기 창에서 프로젝트를 펼치고 데이터 세트를 클릭합니다.

    2. 데이터 세트 목록에서 bqml_tutorial 데이터 세트를 클릭합니다.

    3. 세부정보 창에서 삭제를 클릭합니다.

    4. 데이터 세트 삭제 대화상자에서 삭제를 클릭합니다.

bq

bqml_tutorial 데이터 세트, 원격 모델, 출력 테이블을 삭제합니다.

bq rm --dataset --recursive bqml_tutorial

다음 단계