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:
_filters['view_name.field_name']{% date_start date_filter_name %}{% date_end date_filter_name %}{% condition filter_name %} sql_or_lookml_reference {% endcondition %}{% if %} sql_or_lookml_reference {% else %} other_value {% endif %}{% parameter parameter_name %}parameter_name._parameter_value_user_attributes['name_of_attribute']_localization['localization_key']_model._name_explore._name_explore._dashboard_url_query._query_timezoneview_name._in_queryview_name.field_name._in_queryview_name.field_name._is_selectedview_name.field_name._is_filtered_view._name
Die folgenden Liquid-Nutzungsmuster werden in sql_preamble nicht unterstützt:
valuerendered_valuefilterable_valuelinklinked_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.