BigQuery AI and ML SDK for ABAP を使用すると、BigQuery を集中型のクエリ リポジトリとして使用して、ABAP アプリケーションから実行できるクエリを保存、維持、取得できます。
一元化されたクエリ リポジトリは、検証済みかつ最適化されたクエリの単一の信頼できる情報源を提供します。一元化されたクエリ リポジトリとして BigQuery は、BigQuery AI と ML SDK for ABAP のさまざまなモジュールで使用され、保存したクエリを取得して実行します。
BigQuery の保存済みクエリの詳細については、保存済みクエリの概要をご覧ください。
始める前に
BigQuery を一元化されたクエリ リポジトリとして使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。
- Google Cloud プロジェクトで BigQuery API を有効になっている。 Google Cloud API を有効にする方法については、API の有効化をご覧ください。
- Google Cloud プロジェクトで BigQuery Studio が有効になっている。
- クエリを作成して保存するための必要なロールが付与されている。
- Google Cloud プロジェクトで課金が有効になっている。
- SAP 環境に BigQuery AI and ML SDK for ABAP をインストールしている。
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 CloudUNIQUE_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 CloudTABLE_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
に対して設定されたクエリ パラメータが保持されます。