sql_preamble

Nutzung

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
Hierarchie
sql_preamble
Standardwert
Keine
Akzeptiert
Ein SQL-Ausdruck

Definition

Mit dem Parameter sql_preamble wird eine SQL-Anweisung angegeben, die vor dem Ausführen von Abfragen im Explore ausgeführt wird. Der primäre Zweck von sql_preamble ist das Erstellen benutzerdefinierter Funktionen (User-Defined Functions, UDFs) in Google BigQuery. Bei den meisten Datenbankdialekten können Sie UDFs direkt auf dem Datenbankserver installieren. Google BigQuery ist jedoch zustandslos, daher bietet sql_preamble diese Funktion.

Liquid in sql_preamble verwenden

Der Parameter sql_preamble unterstützt Liquid und Nutzerattribute. So lässt sich dynamisches SQL für Anwendungsfälle wie das Festlegen von Sitzungsvariablen, das Auswählen verschiedener Data Warehouses oder Datenbanken, das Implementieren von Partition Pruning in BigQuery und das flexible Filtern von Daten durch direktere Interaktion mit der zugrunde liegenden Datenbank generieren.

Die folgenden Liquid-Anwendungsmuster werden im Parameter sql_preamble unterstützt:

Die folgenden Liquid-Nutzungsmuster werden in sql_preamble nicht unterstützt:

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

Beispiele

sql_preamble zum Angeben einer BigQuery-Reservierung verwenden

Geben Sie eine Google BigQuery-Reservierung an, die für die Abfragen des Explores verwendet werden soll. Verwenden Sie dazu die BigQuery-SQL-Anweisung SET @@reservation im Parameter sql_preamble:

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

sql_preamble verwenden, um einen temporären Median hinzuzufügen

Erstellen Sie eine benutzerdefinierte Funktion (User-Defined Function, UDF) in Google BigQuery, die einen Median mithilfe der Google BigQuery-Anweisung CREATE TEMP FUNCTION berechnet und die Medianfunktion vor jeder Abfrage in Explore in den Google BigQuery-SQL-Code einfügt.

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

Liquid in sql_preamble verwenden, um den Tabellennamen zu lokalisieren

Verwenden Sie Liquid in sql_preamble, um eine temporäre Tabelle zu erstellen, deren Name auf der ausgewählten Sprache des Nutzers basiert. So kann ein einzelnes LookML-Modell an verschiedene interne Namenskonventionen angepasst werden:

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

Anstelle eines fest codierten Namens wie mytable für die temporäre Tabelle wird in diesem Code die Liquid-Variable durch den tatsächlichen String ersetzt, der in der Datei mit lokalisierten Strings für den Schlüssel storage_table_name definiert ist. Weitere Informationen finden Sie unter Gebietsschema in Liquid-Variablen verwenden.

In der Looker-Abfrage, die auf die Präambel folgt, wird dann auf diese dynamisch benannte Tabelle verwiesen. In der SQL-Abfrage würde beispielsweise FROM {{ _localization['storage_table_name'] }} verwendet.