sql_preamble

Uso

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
Jerarquía
sql_preamble
Valor predeterminado
Ninguno
Acepta
Una expresión SQL

Definición

El parámetro sql_preamble especifica una instrucción de SQL que se ejecuta antes de que se ejecuten las consultas en Explorar. El uso principal de sql_preamble es crear funciones definidas por el usuario (UDF) en Google BigQuery. La mayoría de los dialectos de bases de datos te permiten instalar UDF directamente en el servidor de la base de datos, pero Google BigQuery no tiene estado, por lo que sql_preamble proporciona esta funcionalidad.

Usa Liquid en sql_preamble

El parámetro sql_preamble admite Liquid y atributos del usuario, lo que permite la generación dinámica de SQL para casos de uso como la configuración de variables de sesión, la selección de diferentes almacenes o bases de datos, la implementación de la eliminación de particiones en BigQuery y el filtrado flexible de datos a través de una interacción más directa con la base de datos subyacente.

En el parámetro sql_preamble, se admiten los siguientes patrones de uso de Liquid:

Los siguientes patrones de uso de Liquid no son compatibles con sql_preamble:

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

Ejemplos

Usa sql_preamble para especificar una reserva de BigQuery

Especifica una reserva de Google BigQuery para usar en las consultas de Explorar con la instrucción SET @@reservation de SQL de BigQuery en el parámetro sql_preamble:

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

Cómo usar sql_preamble para agregar una mediana temporal

Crea una función definida por el usuario (UDF) en Google BigQuery que calcule una mediana con la instrucción CREATE TEMP FUNCTION de Google BigQuery y, luego, inserta la función de mediana en el SQL de Google BigQuery antes de que se ejecute cada consulta en Explorar.

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

Cómo usar Liquid en sql_preamble para localizar el nombre de la tabla

Usa Liquid en sql_preamble para crear una tabla temporal cuyo nombre se base en el idioma seleccionado por el usuario, de modo que un solo modelo de LookML pueda adaptarse a diferentes convenciones de nomenclatura internas:

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

En lugar de usar un nombre codificado, como mytable, para la tabla temporal, este código reemplazará la variable de Liquid por la cadena real que se define en el archivo de cadenas de configuración regional para la clave storage_table_name. Consulta Cómo usar la configuración regional en variables de Liquid para obtener más información.

La consulta de Looker que sigue al preámbulo haría referencia a esta tabla con nombre dinámico. Por ejemplo, la consulta en SQL usaría FROM {{ _localization['storage_table_name'] }}.