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 Explorer. L'utilisation principale de sql_preamble est la création de fonctions définies par l'utilisateur (UDF) sur 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. C'est donc sql_preamble qui fournit cette fonctionnalité.

Utiliser Liquid dans sql_preamble

Le paramètre sql_preamble est compatible avec les attributs Liquid et 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 partition 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 Liquid suivants sont acceptés dans le paramètre sql_preamble :

Les modèles d'utilisation Liquid suivants ne sont pas acceptés dans 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 Explore en utilisant 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 (UDF) sur Google BigQuery qui calcule une médiane à l'aide de l'instruction CREATE TEMP FUNCTION de Google BigQuery, puis insérez la fonction médiane dans le code SQL Google BigQuery avant l'exécution de chaque requête dans Explorer.

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 dont le nom est basé sur la langue sélectionnée par l'utilisateur. Ainsi, un seul modèle LookML peut s'adapter à différentes conventions de dénomination internes :

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

Au lieu d'utiliser un nom codé en dur comme mytable pour la table temporaire, ce code remplacera 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 Utiliser des paramètres régionaux dans des variables Liquid.

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