BigQuery에서 엔터프라이즈 쿼리 저장 및 관리

ABAP용 BigQuery AI 및 ML SDK를 사용하면 BigQuery를 중앙 집중식 쿼리 저장소로 사용하여 ABAP 애플리케이션에서 실행할 수 있는 쿼리를 저장, 유지 관리, 검색할 수 있습니다.

중앙 집중식 쿼리 저장소는 검증되고 최적화된 쿼리에 대한 단일 소스 역할을 합니다. 중앙 집중식 쿼리 저장소인 BigQuery는 ABAP용 BigQuery AI 및 ML SDK의 여러 모듈에서 저장된 쿼리를 검색하고 실행하는 데 사용됩니다.

BigQuery의 저장된 쿼리에 대한 자세한 내용은 저장된 쿼리 소개를 참고하세요.

시작하기 전에

BigQuery를 중앙 집중식 쿼리 저장소로 사용하기 전에 개발자 또는 관리자가 다음 기본 요건을 완료했는지 확인합니다.

BigQuery에서 엔터프라이즈 쿼리 만들기

BigQuery에서 쿼리의 초안을 작성하고 유효성을 검사하며 저장하려면 BigQuery 스튜디오를 사용하세요. BigQuery Studio에서 쿼리를 만드는 방법에 관한 자세한 내용은 저장된 쿼리 만들기를 참고하세요. 쿼리는 쿼리 이름과 위치에 따라 Google Cloud 프로젝트에 저장됩니다.

쿼리를 다른 사용자와 공유할 수도 있습니다. 저장된 쿼리를 사용자와 공유하는 방법에 관한 자세한 내용은 저장된 쿼리 공유를 참고하세요.

쿼리 샘플

다음 쿼리 샘플은 쿼리의 구조를 지정하는 방법을 보여줍니다.

Gemini 모델 호출을 위한 쿼리

SELECT *
  FROM ML.GENERATE_TEXT(MODEL `PROJECT_ID_DATASET_GEMINI_MODEL`,
    (SELECT `UNIQUE_TABLE_FIELD` AS id,
 'PROMPT_TEXT' AS prompt
   FROM `PROJECT_ID_DATASET_TABLE`),
 STRUCT( <Temperature> AS temperature,
  <Top_P> AS top_p,
  <Top_K> AS top_k,
            <Max Output Token> AS max_output_tokens,
               <Is Flatten JSON Output> AS flatten_json_output,
            <Stop Sequences[]> AS stop_sequences,
        <Ground with Google Search> AS ground_with_google_search,
        <Safety Settings[]> AS safety_settings ) );

다음을 바꿉니다.

  • PROJECT_ID_DATASET_GEMINI_MODEL: 프로젝트에서 만든 Gemini 원격 모델로, Google Cloud 프로젝트 ID 및 BigQuery 데이터 세트가 접두사로 추가됩니다.
  • UNIQUE_TABLE_FIELD: Gemini 응답을 가져올 BigQuery 테이블의 고유한 테이블 필드입니다.
  • PROMPT_TEXT: Gemini에 제공하려는 프롬프트 문자열입니다.
  • PROJECT_ID_DATASET_TABLE: 전달된 프롬프트와 함께 Gemini를 사용하여 분석하려는 데이터가 포함된 BigQuery 테이블입니다.

BigQuery 벡터 데이터베이스를 업데이트하기 위한 쿼리

CREATE OR REPLACE TABLE `PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE` AS (
 SELECT id, content, ml_generate_embedding_result AS embedding
 FROM ML.GENERATE_EMBEDDING(
   MODEL `PROJECT_ID_DATASET_EMBEDDING_MODEL`,
   ( SELECT `TABLE_FIELD_NAME_WHICH_HAS_THE_TEXT` AS content,
            `<Unique Table Field>` as id
     FROM `PROJECT_ID_DATASET_TABLE` ),
   STRUCT( <Is Flatten JSON Output> AS flatten_json_output,
           <Task Type> as task_type,
           <Output Dimensionality> as output_dimensionality )));

다음을 바꿉니다.

  • PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE: 최신 엔터프라이즈 데이터의 임베딩을 저장하는 BigQuery 벡터 데이터베이스 테이블입니다.
  • PROJECT_ID_DATASET_EMBEDDING_MODEL: 프로젝트에서 만든 Gemini 원격 모델로, Google Cloud 프로젝트 ID 및 BigQuery 데이터 세트가 접두사로 추가됩니다.
  • TABLE_FIELD_NAME_WHICH_HAS_THE_TEXT: 임베딩을 생성할 데이터가 포함된 BigQuery 테이블 필드 이름입니다.
  • UNIQUE_TABLE_FIELD: BigQuery 벡터 데이터베이스 테이블에 임베딩을 저장할 BigQuery 테이블의 고유한 테이블 필드입니다.
  • PROJECT_ID_DATASET_TABLE: 임베딩을 생성할 데이터가 포함된 BigQuery 테이블입니다.
DECLARE search_query STRING DEFAULT SEARCH_STRING;
SELECT *
  FROM VECTOR_SEARCH(
  TABLE `PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE`, 'embedding',
  (
    SELECT ml_generate_embedding_result, content AS query
    FROM ML.GENERATE_EMBEDDING(
      MODEL `PROJECT_ID_DATASET_EMBEDDING_MODEL`,
      (SELECT search_query AS content))
    ), top_k => <number of nearest neighbors to return> );

다음을 바꿉니다.

  • SEARCH_STRING: BigQuery 벡터 데이터베이스에서 유사한 항목을 찾을 자연 언어 기반 검색 문자열입니다. 이름이 지정된 매개변수를 설정하고 SDK를 사용하여 ABAP 애플리케이션 로직에서 검색 문자열을 쿼리 매개변수로 전달할 수도 있습니다.
  • PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE: 임베딩이 포함된 BigQuery 벡터 데이터베이스 테이블 이름으로, 접두어로 프로젝트 ID와 BigQuery 데이터 세트가 추가됩니다.
  • PROJECT_ID_DATASET_EMBEDDING_MODEL: 프로젝트에서 만든 Gemini 원격 모델로, Google Cloud 프로젝트 ID 및 BigQuery 데이터 세트가 접두사로 추가됩니다.

BigQuery에서 엔터프라이즈 쿼리 검색

BigQuery에 저장된 쿼리를 검색하려면 ABAP 클래스 /GOOG/CL_BQ_QUERY를 사용하세요. 이 클래스는 내부적으로 Dataform API를 사용하여 저장된 쿼리를 검색하고 SDK의 다른 모듈에서 이를 사용합니다.

클래스 인스턴스화

클라이언트 키 이름과 쿼리 위치를 사용하여 클래스를 인스턴스화합니다.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
  • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
  • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.

인스턴스화된 클래스의 참조는 저장된 쿼리 텍스트를 보유하며 ABAP용 BigQuery AI 및 ML SDK의 다른 모듈에서 저장된 쿼리를 참조하는 데 사용됩니다.

매개변수 IV_QUERY_TEXT 아래의 프로그램 로직에서 쿼리를 쿼리 텍스트로 전달할 수도 있습니다.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_text  = 'QUERY_TEXT' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

설정 쿼리 재정의

/GOOG/CL_BQ_QUERY 클래스의 참조에서 설정 쿼리를 다른 쿼리로 재정의하려면 /GOOG/CL_BQ_QUERY 클래스의 SET_QUERY 메서드를 사용합니다. 이렇게 하면 클래스 인스턴스화 시 쿼리 세트가 대체됩니다.

재정의는 BigQuery에 저장된 쿼리 이름을 전달하거나 프로그램 로직에서 전달된 쿼리 텍스트를 전달하여 실행할 수 있습니다.

저장된 쿼리 이름을 사용하여 재정의

lo_bq_query->set_query( iv_query_name = 'QUERY_NAME' ).

쿼리 텍스트를 사용하여 재정의

lo_bq_query->set_query( iv_query_text = 'QUERY_TEXT' ).

쿼리 매개변수 설정

BigQuery에 저장된 매개변수화된 쿼리의 이름이 지정된 매개변수를 전달하려면 /GOOG/CL_BQ_QUERY 클래스의 SET_QUERY_PARAMETERS 메서드를 사용하세요. 이러한 매개변수의 매개변수 이름은 저장된 쿼리에 정의된 이름과 동일합니다. 이 메서드를 사용하여 런타임 중에 매개변수 이름의 매개변수 값을 애플리케이션 로직에서 전달할 수 있습니다.


DATA lt_query_parameters    TYPE /goog/cl_bq_query=>ty_t_query_parameters.
<Prepare lt_query_parameters>
TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
    lo_bq_query->set_query_parameters( it_query_parameters = lt_query_patameters ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

값 기반 매개변수 전달

매개변수 이름 및 유형과 함께 값 기반 매개변수를 전달하려면 /GOOG/CL_BQ_QUERY 클래스의 SET_QUERY_PARAMETERS 메서드를 사용하세요.

DATA lt_query_parameters    TYPE /goog/cl_bq_query=>ty_t_query_parameters,
DATA ls_query_parameter     TYPE /goog/cl_bq_query=>ty_query_parameter.

ls_query_parameter-parameter_name  = 'PARAMETER_NAME'.
ls_query_parameter-parameter_type  = 'PARAMETER_TYPE'.
ls_query_parameter-parameter_value = 'PARAMETER_VALUE'.

APPEND ls_query_parameter TO lt_query_parameters.
CLEAR ls_query_parameter.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
    lo_bq_query->set_query_parameters( it_query_parameters = lt_query_patameters ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • PARAMETER_NAME: 저장된 쿼리에 이름이 지정된 매개변수로 정의된 매개변수의 이름입니다.
  • PARAMETER_TYPE: 유효한 매개변수 데이터 유형입니다.
  • PARAMETER_VALUE: 문자열 형식의 값입니다.
  • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
  • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
  • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.

배열 기반 매개변수 전달

배열 기반 매개변수를 매개변수 이름 및 배열 값과 함께 전달하려면 /GOOG/CL_BQ_QUERY 클래스의 SET_QUERY_PARAMETERS 메서드를 사용하세요.

DATA lt_query_parameters    TYPE /goog/cl_bq_query=>ty_t_query_parameters,
DATA ls_query_parameter     TYPE /goog/cl_bq_query=>ty_query_parameter.

ls_query_parameter-parameter_name  = 'PARAMETER_NAME'.
ls_query_parameter-parameter_type = 'ARRAY'.
ls_query_parameter-array_type = 'ARRAY_TYPE'.

APPEND 'ARRAY_VALUE' TO ls_query_parameter-array_values.
APPEND 'ARRAY_VALUE' TO ls_query_parameter-array_values.
APPEND....

APPEND ls_query_parameter TO lt_query_parameters.
CLEAR ls_query_parameter.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
    lo_bq_query->set_query_parameters( it_query_parameters = lt_query_patameters ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • PARAMETER_NAME: 저장된 쿼리에 이름이 지정된 매개변수로 정의된 매개변수의 이름입니다.
  • ARRAY_TYPE: 유효한 배열 데이터 유형입니다.
  • ARRAY_VALUE: 문자열 형식의 배열 값입니다.
  • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
  • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
  • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.

구조체 기반 매개변수 전달

구조체 필드 이름, 구조체 필드 유형, 구조체 필드 값과 함께 구조체를 매개변수로 전달하려면 /GOOG/CL_BQ_QUERY 클래스의 SET_QUERY_PARAMETERS 메서드를 사용하세요.


DATA lt_query_parameters    TYPE /goog/cl_bq_query=>ty_t_query_parameters,
DATA ls_query_parameter     TYPE /goog/cl_bq_query=>ty_query_parameter,
DATA ls_struct_values       TYPE /goog/cl_bq_query=>ty_struct_values.

ls_query_parameter-parameter_name  = 'PARAMETER_NAME'.
ls_query_parameter-parameter_type = 'STRUCT'.

ls_struct_values-field_name = 'STRUCT_FIELD_NAME'.
ls_struct_values-field_type = 'STRUCT_FIELD_TYPE'.
ls_struct_values-field_value = 'STRUCT_FIELD_VALUE'.

APPEND ls_struct_values TO ls_query_parameter-struct_values.
CLEAR ls_struct_values.
....

APPEND ls_query_parameter TO lt_query_parameters.
CLEAR ls_query_parameter.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
    lo_bq_query->set_query_parameters( it_query_parameters = lt_query_patameters ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • PARAMETER_NAME: 저장된 쿼리에 이름이 지정된 매개변수로 정의된 매개변수의 이름입니다.
  • STRUCT_FIELD_NAME: 구조체의 필드 이름입니다.
  • STRUCT_FIELD_TYPE: 유효한 구조체 데이터 유형입니다.
  • STRUCT_FIELD_VALUE: 구조 필드의 값(문자열 형식)입니다.
  • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
  • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
  • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.

쿼리 텍스트 가져오기

BigQuery에 저장된 쿼리의 쿼리 텍스트를 가져오려면 /GOOG/CL_BQ_QUERY 클래스의 GET_QUERY_TEXT 메서드를 사용합니다.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
    DATA(lv_query_text) = lo_bq_query->get_query_text( ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
  • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
  • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.

LV_QUERY_TEXTSAVED_QUERY_NAME에 대해 유지되는 쿼리를 보유합니다.

쿼리 매개변수 가져오기

SDK 메서드 SET_QUERY_PARAMETERS를 통해 설정된 쿼리 매개변수를 가져오려면 /GOOG/CL_BQ_QUERY 클래스의 GET_QUERY_PARAMETERS 메서드를 사용합니다.

DATA lt_query_parameters    TYPE /goog/cl_bq_query=>ty_t_query_parameters,
DATA ls_query_parameter     TYPE /goog/cl_bq_query=>ty_query_parameter.

ls_query_parameter-parameter_name  = 'PARAMETER_NAME'.
ls_query_parameter-parameter_type  = 'PARAMETER_TYPE'.
ls_query_parameter-parameter_value = 'PARAMETER_VALUE'.

APPEND ls_query_parameter TO lt_query_parameters.
CLEAR ls_query_parameter.

TRY.
    DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                               iv_location_id = 'QUERY_LOCATION_ID'
       iv_query_name  = 'SAVED_QUERY_NAME' ).
    lo_bq_query->set_query_parameters( it_query_parameters = lt_query_patameters ).
    DATA(lt_parameters) = lo_bq_query->get_query_parameters( ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • PARAMETER_NAME: 저장된 쿼리에 이름이 지정된 매개변수로 정의된 매개변수의 이름입니다.
  • PARAMETER_TYPE: 유효한 매개변수 데이터 유형입니다.
  • PARAMETER_VALUE: 문자열 형식의 값입니다.
  • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
  • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
  • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.

LT_PARAMETERSSAVED_QUERY_NAME에 대해 설정된 쿼리 매개변수를 보유합니다.