sql_preamble

Uso

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
Hierarquia
sql_preamble
Valor padrão
Nenhum
Aceita
Uma expressão SQL

Definição

O parâmetro sql_preamble especifica uma instrução SQL que é executada antes das consultas na análise detalhada. O uso principal do sql_preamble é criar funções definidas pelo usuário (UDFs) no Google BigQuery. A maioria dos dialetos de banco de dados permite instalar UDFs diretamente no servidor de banco de dados, mas o Google BigQuery não tem estado. Por isso, o sql_preamble oferece essa funcionalidade.

Usar o Liquid no sql_preamble

O parâmetro sql_preamble é compatível com atributos do Liquid e do usuário, o que permite a geração dinâmica de SQL para casos de uso como definir variáveis de sessão, selecionar diferentes armazenamentos ou bancos de dados, implementar a remoção de partições no BigQuery e permitir a filtragem flexível de dados interagindo com o banco de dados subjacente de forma mais direta.

Os seguintes padrões de uso do Liquid são compatíveis com o parâmetro sql_preamble:

Os seguintes padrões de uso do Liquid não são compatíveis com o sql_preamble:

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

Exemplos

Usar sql_preamble para especificar uma reserva do BigQuery

Especifique uma reserva do Google BigQuery para usar nas consultas do recurso Detalhar usando a instrução SQL SET @@reservation do BigQuery no parâmetro sql_preamble:

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

Como usar sql_preamble para adicionar uma mediana temporária

Crie uma função definida pelo usuário (UDF) no Google BigQuery que calcule uma mediana usando a instrução CREATE TEMP FUNCTION do Google BigQuery e insira a função de mediana no SQL do Google BigQuery antes de cada consulta na análise detalhada ser executada.

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

Usar Liquid em sql_preamble para localizar o nome da tabela

Use o Liquid em sql_preamble para criar uma tabela temporária com um nome baseado no idioma selecionado pelo usuário. Assim, um único modelo da LookML pode se adaptar a diferentes convenções de nomenclatura internas:

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

Em vez de usar um nome codificado, como mytable, para a tabela temporária, esse código vai substituir a variável Liquid pela string real definida no arquivo de strings de localidade para a chave storage_table_name. Consulte Como usar a localidade em variáveis Liquid para mais informações.

A consulta do Looker que segue o preâmbulo faria referência a essa tabela nomeada dinamicamente. Por exemplo, a consulta SQL usaria FROM {{ _localization['storage_table_name'] }}.