sql_preamble

Utilisation

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
Hiérarchie
sql_preamble
Valeur par défaut
Aucun
Acceptation
Expression SQL

Définition

Le paramètre sql_preamble spécifie une instruction SQL qui s'exécute avant les requêtes dans l'exploration. L'utilisation principale de sql_preamble consiste à créer des fonctions définies par l'utilisateur dans Google BigQuery. La plupart des dialectes de base de données vous permettent d'installer des UDF directement sur le serveur de base de données, mais Google BigQuery est sans état. Par conséquent, sql_preamble fournit cette fonctionnalité.

Utiliser Liquid dans sql_preamble

Le paramètre sql_preamble est compatible avec Liquid et les attributs utilisateur, ce qui permet de générer du code SQL dynamique pour des cas d'utilisation tels que la définition de variables de session, la sélection de différents entrepôts ou bases de données, l'implémentation de l'élagage de partitions dans BigQuery et le filtrage flexible des données en interagissant plus directement avec la base de données sous-jacente.

Les modèles d'utilisation de Liquid suivants sont compatibles avec le paramètre sql_preamble :

Les modèles d'utilisation de Liquid suivants ne sont pas compatibles avec sql_preamble :

  • value
  • rendered_value
  • filterable_value
  • link
  • linked_value
  • _field._name

Exemples

Utiliser sql_preamble pour spécifier une réservation BigQuery

Spécifiez une réservation Google BigQuery à utiliser pour les requêtes de l'exploration à l'aide de l'instruction SQL BigQuery SET @@reservation dans le paramètre sql_preamble :

explore: orders {
  sql_preamble:
    SET @@reservation='projects/your-project/locations/your-location/reservations/your-reservation';
}

Utiliser sql_preamble pour ajouter une médiane temporaire

Créez une fonction définie par l'utilisateur dans Google BigQuery qui calcule une médiane à l'aide de l'instruction Google BigQuery CREATE TEMP FUNCTION, puis insérez la fonction médiane dans le code SQL Google BigQuery avant l'exécution de chaque requête dans l'exploration.

explore: salary {
  sql_preamble:
    CREATE TEMP FUNCTION MEDIAN(a_num ARRAY<FLOAT64>)
    RETURNS FLOAT64 AS ((
       SELECT
          AVG(num)
        FROM (
          SELECT
            row_number() OVER (ORDER BY num) -1 as rn
            , num
          FROM UNNEST(a_num) num
        )
        WHERE
          rn = TRUNC(ARRAY_LENGTH(a_num)/2)
            OR (
             MOD(ARRAY_LENGTH(a_num), 2) = 0 AND
              rn = TRUNC(ARRAY_LENGTH(a_num)/2)-1 )
    ));
  ;;
}

Utiliser Liquid dans sql_preamble pour localiser le nom de la table

Utilisez Liquid dans sql_preamble pour créer une table temporaire nommée en fonction de la langue sélectionnée par l'utilisateur, afin qu'un seul modèle LookML puisse s'adapter à différentes conventions de nommage internes :

explore: orders {
  sql_preamble: 
    WITH {{ _localization['storage_table_name'] }} AS (select * from users);;
  ...
}

Au lieu d'utiliser un nom codé en dur tel que mytable pour la table temporaire, ce code remplace la variable Liquid par la chaîne réelle définie dans le fichier de chaînes de paramètres régionaux pour la clé storage_table_name. Pour en savoir plus, consultez la section Utiliser les paramètres régionaux dans les variables Liquid.

La requête Looker qui suit le préambule fait ensuite référence à cette table nommée de manière dynamique. Par exemple, la requête SQL utilise FROM {{ _localization['storage_table_name'] }}.