Stocker et gérer des requêtes d'entreprise dans BigQuery

Le SDK BigQuery AI et ML pour ABAP vous permet d'utiliser BigQuery comme dépôt de requêtes centralisé pour stocker, gérer et récupérer les requêtes que vous pouvez exécuter à partir de vos applications ABAP.

Un dépôt de requêtes centralisé fournit une source unique de vérité pour les requêtes validées et optimisées. BigQuery en tant que dépôt de requêtes centralisé est utilisé par différents modules du SDK BigQuery AI et ML pour ABAP afin de récupérer et d'exécuter les requêtes enregistrées.

Pour en savoir plus sur les requêtes enregistrées dans BigQuery, consultez la page Présentation des requêtes enregistrées.

Avant de commencer

Avant d'utiliser BigQuery comme dépôt de requêtes centralisé, assurez-vous que vous ou vos administrateurs avez rempli les conditions préalables suivantes:

Créer des requêtes d'entreprise dans BigQuery

Pour rédiger, valider et enregistrer vos requêtes dans BigQuery, utilisez BigQuery Studio. Pour savoir comment créer des requêtes dans BigQuery Studio, consultez Créer des requêtes enregistrées. Les requêtes sont enregistrées dans votre Google Cloud projet avec un nom de requête et un emplacement.

Vous pouvez également les partager avec d'autres utilisateurs. Pour savoir comment partager une requête enregistrée avec un utilisateur, consultez Partager des requêtes enregistrées.

Exemples de requêtes

Les exemples de requêtes suivants montrent comment structurer vos requêtes.

Requête pour appeler des modèles 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 ) );

Remplacez les éléments suivants :

  • PROJECT_ID_DATASET_GEMINI_MODEL: modèle à distance Gemini créé dans votre Google Cloud projet, précédé de l'ID du projet et de l'ensemble de données BigQuery.
  • UNIQUE_TABLE_FIELD: champ de table unique de la table BigQuery pour laquelle vous souhaitez obtenir la réponse Gemini.
  • PROMPT_TEXT: chaîne d'invite que vous souhaitez fournir à Gemini.
  • PROJECT_ID_DATASET_TABLE: table BigQuery contenant les données que vous souhaitez analyser à l'aide de Gemini avec la requête transmise.

Requête pour mettre à jour la base de données vectorielle 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 )));

Remplacez les éléments suivants :

  • PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE: table de la base de données vectorielle BigQuery permettant de stocker des représentations vectorielles continues pour vos données d'entreprise les plus récentes.
  • PROJECT_ID_DATASET_EMBEDDING_MODEL: modèle à distance Gemini créé dans votre Google Cloud projet, précédé de l'ID du projet et de l'ensemble de données BigQuery.
  • TABLE_FIELD_NAME_WHICH_HAS_THE_TEXT: nom du champ de la table BigQuery contenant les données pour lesquelles vous souhaitez générer des représentations vectorielles continues.
  • UNIQUE_TABLE_FIELD: champ de table unique de la table BigQuery pour laquelle vous souhaitez enregistrer les représentations vectorielles continues dans la table de la base de données vectorielle BigQuery.
  • PROJECT_ID_DATASET_TABLE: table BigQuery contenant les données pour lesquelles vous souhaitez générer des représentations vectorielles continues.
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> );

Remplacez les éléments suivants :

  • SEARCH_STRING: chaîne de recherche basée sur le langage naturel à partir de laquelle vous souhaitez trouver des éléments similaires dans la base de données de vecteurs BigQuery. Vous pouvez également définir un paramètre nommé pour cela et transmettre la chaîne de recherche en tant que paramètre de requête à partir de la logique d'application ABAP à l'aide du SDK.
  • PROJECT_ID_DATASET_BQ_VECTOR_DB_TABLE: nom de la table de la base de données vectorielle BigQuery contenant les représentations vectorielles continues, précédé de l'ID du projet et de l'ensemble de données BigQuery.
  • PROJECT_ID_DATASET_EMBEDDING_MODEL: modèle à distance Gemini créé dans votre Google Cloud projet, précédé de l'ID du projet et de l'ensemble de données BigQuery.

Récupérer des requêtes d'entreprise à partir de BigQuery

Pour récupérer les requêtes enregistrées dans BigQuery, utilisez la classe ABAP /GOOG/CL_BQ_QUERY. La classe utilise en interne l'API Dataform pour récupérer les requêtes enregistrées, qui sont ensuite utilisées par d'autres modules du SDK.

Instancier la classe

Instanciez la classe à l'aide du nom de la clé client et de l'emplacement de la requête.

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.

Remplacez les éléments suivants :

  • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
  • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
  • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.

Une fois instanciée, la référence de la classe contient le texte de la requête enregistrée et est utilisée par les autres modules du SDK BigQuery AI et ML pour ABAP pour faire référence à la requête enregistrée.

Vous pouvez également transmettre la requête en tant que texte de requête à partir de la logique du programme sous le paramètre 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.

Forcer une requête définie

Pour remplacer la requête définie dans la référence de la classe /GOOG/CL_BQ_QUERY par une autre requête, utilisez la méthode SET_QUERY de la classe /GOOG/CL_BQ_QUERY. Cela remplace la requête définie au moment de l'instanciation de la classe.

Le forçage peut être effectué en transmettant le nom de la requête enregistrée dans BigQuery ou le texte de la requête transmis à partir de la logique du programme.

Forcer l'utilisation d'un nom de requête enregistrée

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

Forcer l'utilisation d'un texte de requête

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

Définir des paramètres de requête

Pour transmettre des paramètres nommés pour une requête paramétrée enregistrée dans BigQuery, utilisez la méthode SET_QUERY_PARAMETERS de la classe /GOOG/CL_BQ_QUERY. Les noms de ces paramètres sont identiques à ceux définis dans les requêtes enregistrées. Les valeurs des paramètres pour les noms de paramètres peuvent être transmises à partir de la logique de l'application au moment de l'exécution à l'aide de cette méthode.


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.

Transmettre des paramètres basés sur la valeur

Pour transmettre des paramètres basés sur la valeur, ainsi que le nom et le type du paramètre, utilisez la méthode SET_QUERY_PARAMETERS de la 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.

Remplacez les éléments suivants :

  • PARAMETER_NAME: nom du paramètre défini dans la requête enregistrée en tant que paramètre nommé.
  • PARAMETER_TYPE: type de données valide du paramètre.
  • PARAMETER_VALUE: valeur sous forme de chaîne.
  • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
  • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
  • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.

Transmettre des paramètres basés sur un tableau

Pour transmettre des paramètres basés sur un tableau avec le nom du paramètre et les valeurs du tableau, utilisez la méthode SET_QUERY_PARAMETERS de la 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.

Remplacez les éléments suivants :

  • PARAMETER_NAME: nom du paramètre défini dans la requête enregistrée en tant que paramètre nommé.
  • ARRAY_TYPE: type de données de tableau valide.
  • ARRAY_VALUE: valeurs du tableau sous forme de chaîne,
  • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
  • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
  • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.

Transmettre des paramètres basés sur une structure

Pour transmettre une structure en tant que paramètre, ainsi que le nom, le type et la valeur du champ de la structure, utilisez la méthode SET_QUERY_PARAMETERS de la 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.

Remplacez les éléments suivants :

  • PARAMETER_NAME: nom du paramètre défini dans la requête enregistrée en tant que paramètre nommé.
  • STRUCT_FIELD_NAME: nom du champ de la structure.
  • STRUCT_FIELD_TYPE: type de données struct valide.
  • STRUCT_FIELD_VALUE: valeur du champ de structure sous forme de chaîne.
  • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
  • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
  • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.

Obtenir le texte de la requête

Pour extraire le texte de la requête d'une requête enregistrée dans BigQuery, utilisez la méthode GET_QUERY_TEXT de la 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.

Remplacez les éléments suivants :

  • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
  • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
  • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.

LV_QUERY_TEXT contient la requête gérée par le SAVED_QUERY_NAME.

Obtenir des paramètres de requête

Pour extraire les paramètres de requête définis via la méthode SET_QUERY_PARAMETERS du SDK, utilisez la méthode GET_QUERY_PARAMETERS de la 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.

Remplacez les éléments suivants :

  • PARAMETER_NAME: nom du paramètre défini dans la requête enregistrée en tant que paramètre nommé.
  • PARAMETER_TYPE: type de données valide du paramètre.
  • PARAMETER_VALUE: valeur sous forme de chaîne.
  • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
  • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
  • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.

LT_PARAMETERS contient les paramètres de requête définis sur SAVED_QUERY_NAME.