sql_preamble

Utilizzo

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
Gerarchia
sql_preamble
Valore predefinito
Nessuno
Accetta
Un'espressione SQL

Definizione

Il parametro sql_preamble specifica un'istruzione SQL che viene eseguita prima delle query in Esplora. L'utilizzo principale di sql_preamble è la creazione di funzioni definite dall'utente (UDF) su Google BigQuery. La maggior parte dei dialetti del database consente di installare le UDF direttamente sul server di database, ma Google BigQuery è stateless, quindi sql_preamble fornisce questa funzionalità.

Utilizzare Liquid in sql_preamble

Il parametro sql_preamble supporta Liquid e gli attributi utente, il che consente la generazione dinamica di SQL per casi d'uso come l'impostazione di variabili di sessione, la selezione di warehouse o database diversi, l'implementazione del pruning delle partizioni in BigQuery e il filtraggio flessibile dei dati interagendo più direttamente con il database sottostante.

Nel parametro sql_preamble sono supportati i seguenti pattern di utilizzo di Liquid:

I seguenti pattern di utilizzo di Liquid non sono supportati in sql_preamble:

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

Esempi

Utilizzo di sql_preamble per specificare una prenotazione BigQuery

Specifica una prenotazione Google BigQuery da utilizzare per le query di Esplora utilizzando l'istruzione SQL SET @@reservation nel parametro sql_preamble:

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

Utilizzare sql_preamble per aggiungere una mediana temporanea

Crea una funzione definita dall'utente (UDF) su Google BigQuery che calcola una mediana utilizzando l'istruzione CREATE TEMP FUNCTION di Google BigQuery e inserisce la funzione mediana nel codice SQL di Google BigQuery prima dell'esecuzione di ogni query in Esplora.

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

Utilizzo di Liquid in sql_preamble per localizzare il nome della tabella

Utilizza Liquid in sql_preamble per creare una tabella temporanea denominata in base alla lingua selezionata dall'utente, in modo che un singolo modello LookML possa adattarsi a diverse convenzioni di denominazione interne:

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

Anziché utilizzare un nome hardcoded come mytable per la tabella temporanea, questo codice sostituirà la variabile Liquid con la stringa effettiva definita nel file di stringhe di localizzazione per la chiave storage_table_name. Per ulteriori informazioni, consulta la sezione Utilizzo delle impostazioni internazionali nelle variabili Liquid.

La query Looker che segue il preambolo farebbe quindi riferimento a questa tabella con nome dinamico. Ad esempio, la query SQL utilizzerebbe FROM {{ _localization['storage_table_name'] }}.