Armazenar e gerenciar consultas empresariais no BigQuery

O SDK de IA e ML do BigQuery para ABAP permite usar o BigQuery como um repositório de consultas centralizado para armazenar, manter e extrair consultas que podem ser executadas nos seus aplicativos ABAP.

Um repositório de consultas centralizado oferece uma única fonte de verdade para consultas validadas e otimizadas. O BigQuery como um repositório de consultas centralizado é usado por diferentes módulos do SDK de IA e ML do BigQuery para ABAP para recuperar e executar as consultas salvas.

Para mais informações sobre as consultas salvas no BigQuery, consulte Introdução às consultas salvas.

Antes de começar

Antes de usar o BigQuery como um repositório de consultas centralizado, verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

Criar consultas empresariais no BigQuery

Para elaborar, validar e salvar suas consultas no BigQuery, use o BigQuery Studio. Para saber como criar consultas no BigQuery Studio, consulte Criar consultas salvas. As consultas são salvas no seu projeto do Google Cloud com um nome de consulta e um local.

Você também pode compartilhar as consultas com outros usuários. Para saber como compartilhar uma consulta salva com um usuário, consulte Compartilhar consultas salvas.

Amostras de consulta

Os exemplos de consulta a seguir ilustram como estruturar suas consultas.

Consulta para invocar modelos do 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 ) );

Substitua:

  • PROJECT_ID_DATASET_GEMINI_MODEL: o modelo remoto do Gemini criado no seu projeto do Google Cloud, com o prefixo do ID do projeto e do conjunto de dados do BigQuery.
  • UNIQUE_TABLE_FIELD: o campo de tabela exclusivo na tabela do BigQuery em que você quer receber a resposta do Gemini.
  • PROMPT_TEXT: a string de comando que você quer fornecer ao Gemini.
  • PROJECT_ID_DATASET_TABLE: a tabela do BigQuery com os dados que você quer analisar usando o Gemini com o comando transmitido.

Consulta para manter o banco de dados vetorial do BigQuery atualizado

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

Substitua:

  • PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE: a tabela do banco de dados de vetores do BigQuery para armazenar embeddings dos dados empresariais mais recentes.
  • PROJECT_ID_DATASET_EMBEDDING_MODEL: o modelo remoto do Gemini criado no seu projeto do Google Cloud, com o prefixo do ID do projeto e do conjunto de dados do BigQuery.
  • TABLE_FIELD_NAME_WHICH_HAS_THE_TEXT: o nome do campo da tabela do BigQuery que tem os dados para gerar incorporações.
  • UNIQUE_TABLE_FIELD: o campo de tabela exclusivo na tabela do BigQuery em que você quer salvar as inclusões na tabela do banco de dados de vetores do BigQuery.
  • PROJECT_ID_DATASET_TABLE: a tabela do BigQuery com os dados para os quais você quer gerar embeddings.
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> );

Substitua:

  • SEARCH_STRING: a string de pesquisa baseada em linguagem natural em que você quer encontrar itens semelhantes no banco de dados de vetores do BigQuery. Também é possível definir um parâmetro nomeado para isso e transmitir a string de pesquisa como um parâmetro de consulta da lógica do aplicativo ABAP usando o SDK.
  • PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE: o nome da tabela do banco de dados de vetores do BigQuery com as incorporações, com prefixo de ID do projeto e conjunto de dados do BigQuery.
  • PROJECT_ID_DATASET_EMBEDDING_MODEL: o modelo remoto do Gemini criado no seu projeto do Google Cloud, com o prefixo do ID do projeto e do conjunto de dados do BigQuery.

Extrair consultas corporativas do BigQuery

Para recuperar as consultas salvas no BigQuery, use a classe ABAP /GOOG/CL_BQ_QUERY. A classe usa internamente a API Dataform para recuperar as consultas salvas, que são usadas por outros módulos do SDK.

Instanciar a classe

Instância a classe usando o nome da chave do cliente e o local da consulta.

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.

Substitua:

  • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
  • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
  • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.

A referência da classe, uma vez instanciada, contém o texto da consulta salva e é usada pelos outros módulos do SDK de IA e ML do BigQuery para ABAP para se referir à consulta salva.

Também é possível transmitir a consulta como texto de consulta da lógica do programa no parâmetro 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.

Substituir uma consulta definida

Para substituir a consulta definida na referência da classe /GOOG/CL_BQ_QUERY por outra consulta, use o método SET_QUERY da classe /GOOG/CL_BQ_QUERY. Isso substitui o conjunto de consultas no momento da instanciação da classe.

A substituição pode ser feita transmitindo o nome da consulta salva no BigQuery ou o texto da consulta transmitido pela lógica do programa.

Substituir usando um nome de consulta salvo

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

Substituir usando um texto de consulta

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

Definir parâmetros de consulta

Para transmitir parâmetros nomeados para uma consulta parametrizada salva no BigQuery, use o método SET_QUERY_PARAMETERS da classe /GOOG/CL_BQ_QUERY. Os nomes dos parâmetros são os mesmos definidos nas consultas salvas. Os valores de parâmetro para os nomes de parâmetro podem ser transmitidos da lógica do aplicativo durante a execução usando esse método.


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.

Transmitir parâmetros com base no valor

Para transmitir parâmetros com base em valores, além do nome e do tipo do parâmetro, use o método SET_QUERY_PARAMETERS da classe /GOOG/CL_BQ_QUERY.

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.

Substitua:

  • PARAMETER_NAME: o nome do parâmetro definido na consulta salva como parâmetro nomeado.
  • PARAMETER_TYPE: o tipo de dados válido do parâmetro.
  • PARAMETER_VALUE: o valor no formato de uma string.
  • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
  • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
  • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.

Transmitir parâmetros baseados em matrizes

Para transmitir parâmetros baseados em matriz com o nome do parâmetro e os valores da matriz, use o método SET_QUERY_PARAMETERS da classe /GOOG/CL_BQ_QUERY.

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.

Substitua:

  • PARAMETER_NAME: o nome do parâmetro definido na consulta salva como parâmetro nomeado.
  • ARRAY_TYPE: o tipo de dados de matriz válido.
  • ARRAY_VALUE: os valores da matriz no formato de string.
  • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
  • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
  • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.

Transmitir parâmetros baseados em struct

Para transmitir uma estrutura como parâmetro com o nome do campo, o tipo de campo e o valor do campo da estrutura, use o método SET_QUERY_PARAMETERS da classe /GOOG/CL_BQ_QUERY.


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.

Substitua:

  • PARAMETER_NAME: o nome do parâmetro definido na consulta salva como parâmetro nomeado.
  • STRUCT_FIELD_NAME: o nome do campo da estrutura.
  • STRUCT_FIELD_TYPE: o tipo de dados de struct válido.
  • STRUCT_FIELD_VALUE: o valor do campo de estrutura na forma de string.
  • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
  • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
  • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.

Receber texto da consulta

Para buscar o texto de uma consulta salva no BigQuery, use o método GET_QUERY_TEXT da classe /GOOG/CL_BQ_QUERY.

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.

Substitua:

  • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
  • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
  • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.

LV_QUERY_TEXT mantém a consulta mantida em relação ao SAVED_QUERY_NAME.

Receber parâmetros de consulta

Para buscar os parâmetros de consulta definidos pelo método SET_QUERY_PARAMETERS do SDK, use o método GET_QUERY_PARAMETERS da classe /GOOG/CL_BQ_QUERY.

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.

Substitua:

  • PARAMETER_NAME: o nome do parâmetro definido na consulta salva como parâmetro nomeado.
  • PARAMETER_TYPE: o tipo de dados válido do parâmetro.
  • PARAMETER_VALUE: o valor no formato de uma string.
  • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
  • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
  • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.

LT_PARAMETERS armazena os parâmetros de consulta definidos para o SAVED_QUERY_NAME.