BigQuery で企業クエリを保存、管理する

BigQuery AI and ML SDK for ABAP を使用すると、BigQuery を集中型のクエリ リポジトリとして使用して、ABAP アプリケーションから実行できるクエリを保存、維持、取得できます。

一元化されたクエリ リポジトリは、検証済みかつ最適化されたクエリの単一の信頼できる情報源を提供します。一元化されたクエリ リポジトリとして BigQuery は、BigQuery AI と ML SDK for ABAP のさまざまなモジュールで使用され、保存したクエリを取得して実行します。

BigQuery の保存済みクエリの詳細については、保存済みクエリの概要をご覧ください。

始める前に

BigQuery を一元化されたクエリ リポジトリとして使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。

BigQuery で企業クエリを作成する

BigQuery でクエリの下書きを作成し、検証して保存するには、BigQuery Studio を使用します。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 リモートモデル。プロジェクト ID と BigQuery データセットが接頭辞として付いています。 Google Cloud
  • 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 リモートモデル。プロジェクト ID と BigQuery データセットが接頭辞として付いています。 Google Cloud
  • 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 リモートモデル。プロジェクト ID と BigQuery データセットが接頭辞として付いています。 Google Cloud

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 にクエリを保存するクエリの名前。

インスタンス化されたクラスの参照は、保存済みクエリテキストを保持し、BigQuery AI and ML SDK for ABAP の他のモジュールが保存されたクエリを参照するために使用されます。

クエリをパラメータ 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_TEXT には、SAVED_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_PARAMETERS には、SAVED_QUERY_NAME に対して設定されたクエリ パラメータが保持されます。