Nutzung
derived_table: {
create_process: {
sql_step:
CREATE TABLE ${SQL_TABLE_NAME}
(customer_id int(11),
lifetime_orders int(11)) ;;
sql_step:
INSERT INTO ${SQL_TABLE_NAME}
(customer_id,
lifetime_orders)
SELECT customer_id, COUNT(*)
AS lifetime_orders
FROM order
GROUP BY customer_id ;;
}
}
|
Hierarchie
create_process |
Standardwert
Keine
Akzeptiert
Mindestens ein sql_step-Unterparameter
|
Definition
Wenn in Ihrem Datenbankdialekt benutzerdefinierte DDL-Befehle (Data Definition Language) verwendet werden, können Sie mit create_process persistente abgeleitete Tabellen (Persistent Derived Tables, PDTs) erstellen. create_process definiert eine Liste von SQL-Anweisungen, die in der angegebenen Reihenfolge ausgeführt werden. Jede SQL-Anweisung wird durch den Unterparameter sql_step festgelegt. Jeder sql_step-Unterparameter kann eine beliebige gültige SQL-Abfrage enthalten. Sie können mehrere sql_step-Unterparameter definieren. Sie werden nacheinander in der angegebenen Reihenfolge ausgeführt. Looker gibt die Anweisungen in den sql_step-Unterparametern unverändert aus, ohne die übliche Fehlerkorrektur von Looker.
Beispielsweise unterstützen einige Datenbankdialekte CREATE TABLE as SELECT nicht als einzelne SQL-Anweisung, sondern erfordern separate SQL-Anweisungen. Daher können keine herkömmlichen SQL-basierten persistenten abgeleiteten Tabellen für diese Dialekte erstellt werden. Mit dem Parameter create_process können Sie PDTs auf alternative Weise erstellen, indem Sie eine Liste separater SQL-Anweisungen erstellen, die nacheinander ausgegeben werden.
Sie können auch create_process verwenden, um Dialekte wie die Google-Vorhersagemodelle für maschinelles Lernen BigQuery ML zu unterstützen.
Der Parameter create_process gibt an, dass Sie die vollständigen CREATE-Anweisungen für die abgeleitete Tabelle schreiben, einschließlich aller Indexe. Wenn Sie einen Index für eine abgeleitete Tabelle mit create_process hinzufügen möchten, verwenden Sie einen sql_step-Parameter, um den SQL-Code für den Index anzugeben.
Für PDTs, die mit
create_processdefiniert werden, können Sie keinen der folgenden Parameter verwenden:indexescluster_keysdistributiondistribution_stylepartition_keyssortkeys
Beispiel
Sie erstellen eine ctasless_customer_order_facts persistente abgeleitete Tabelle in einer MySQL-Datenbank in zwei Schritten. Führen Sie zuerst die SQL-Anweisung CREATE TABLE aus, die durch den ersten sql_step-Unterparameter definiert wird. Führen Sie als Nächstes die SQL-Anweisung INSERT INTO mit einer SELECT-Anweisung aus, die durch den zweiten sql_step-Unterparameter definiert wird:
view: ctasless_customer_order_facts {
derived_table: {
datagroup_trigger: some_datagroup
create_process: {
sql_step: CREATE TABLE ${SQL_TABLE_NAME} (
customer_id int(11),
lifetime_orders int(11)
) ;;
sql_step: INSERT INTO ${SQL_TABLE_NAME}(customer_id, lifetime_orders)
SELECT customer_id, COUNT(*) AS lifetime_orders
FROM order
GROUP BY customer_id ;;
}
}
}
Wichtige Punkte
Substitutionsoperator ${SQL_TABLE_NAME}
Mit dem Substitutionsoperator ${SQL_TABLE_NAME} können Sie den berechneten Namen der erstellten PDT einfügen. So wird sichergestellt, dass der PDT-Name, der im LookML-Parameter view angegeben ist, korrekt in die SQL-Anweisung aufgenommen wird.
create_processmuss eine Tabelle mit dem Namen erstellen, der durch den Ersetzungsoperator${SQL_TABLE_NAME}angegeben wird. Andernfalls wird sie bei jedem Triggerprüfintervall, das in der Einstellung Datagroup and PDT Maintenance Schedule einer Verbindung angegeben ist, von Grund auf neu erstellt (die Standardeinstellung ist fünf Minuten). Dies kann zu unerwartetem Abfrage-Traffic in Ihrer Datenbank oder Ihrem Data Warehouse führen.
PDT in einem Schritt mit sql_create erstellen
Wenn für Ihren Datenbankdialekt benutzerdefinierte DDL-Befehle erforderlich sind und Sie eine PDT in einem einzigen Schritt erstellen möchten, können Sie sql_create verwenden, um eine vollständige SQL CREATE-Anweisung zu definieren, die ausgeführt wird, um eine PDT in einem einzigen Schritt zu erstellen.
Tabellen, die mit create_process definiert sind, können nicht für inkrementelle PDTs verwendet werden.
Damit eine SQL-basierte PDT als inkrementelle PDT verwendet werden kann, muss für sie eine Abfrage mit dem Parameter sql definiert sein. SQL-basierte PDTs, die mit dem Parameter sql_create oder dem Parameter create_process definiert werden, können nicht inkrementell erstellt werden.
Das liegt daran, dass Looker einen INSERT- oder MERGE-Befehl verwendet, um die Inkremente für eine inkrementelle PDT zu erstellen. Die abgeleitete Tabelle kann nicht über benutzerdefinierte DDL-Anweisungen (Data Definition Language) definiert werden, da Looker nicht in der Lage wäre zu bestimmen, welche DDL-Anweisungen für das Erstellen eines akkuraten Inkrements erforderlich wären.