Nutzung
derived_table: {
inkrementeller: ["created_date"]
...
}
}
Hierarchie
increment_key – oder – increment_key |
Standardwert
KeineAkzeptiert
Der Name einer zeitbasierten LookML-DimensionSonderregeln
increment_key wird nur für persistente Tabellen und nur für bestimmte Dialekte unterstützt
|
Definition
Sie können inkrementelle PDTs in Ihrem Projekt erstellen, wenn Ihr Dialekt sie unterstützt. Eine inkrementelle PDT ist eine persistente abgeleitete Tabelle (PDT), die von Looker erstellt wird, indem neue Daten an die Tabelle angehängt werden, anstatt die Tabelle vollständig neu zu erstellen. Weitere Informationen finden Sie auf der Dokumentationsseite Inkrementelle PDTs.
increment_key
ist der Parameter, der ein PDT in einen inkrementellen PDT umwandelt. Dazu wird das Zeitintervall angegeben, für das aktuelle Daten abgefragt und an das PDT angehängt werden sollen. Zusätzlich zu increment_key
können Sie optional ein increment_offset
angeben, um die Anzahl vorheriger Zeiträume (mit dem Detaillierungsgrad) anzugeben, die für spät ankommende Daten neu erstellt werden.
Die
increment_key
für ein PDT ist vom Persistenztrigger des PDT unabhängig. Auf der Dokumentationsseite Inkrementelle PDTs finden Sie einige Beispielszenarien, die die Interaktion vonincrement_key
,increment_offset
und Persistenzstrategie zeigen.Der Parameter
increment_key
funktioniert nur mit unterstützten Dialekten und nur mit Tabellen, die eine Persistenzstrategie haben, z. B. PDTs und zusammengefasste Tabellen (die eine Art von PDT sind).
increment_key
muss eine zeitbasierte LookML-Dimension angeben:
- Bei LookML-basierten PDTs muss
increment_key
auf einer LookML-Dimension basieren, die in der Ansicht definiert ist, auf der dieexplore_source
des PDT basiert. Ein Beispiel finden Sie im Abschnitt Inkrementelle LookML-basierte PDT erstellen auf dieser Seite. - Bei zusammengefassten Tabellen muss die
increment_key
auf einer LookML-Dimension basieren, die in der Ansicht definiert ist, auf der die „Erkunden“-Tabelle basiert. Ein Beispiel finden Sie im Abschnitt Inkrementelle zusammengefasste Tabelle erstellen auf dieser Seite. - Bei SQL-basierten PDTs muss
increment_key
auf einer LookML-Dimension basieren, die in der Ansichtsdatei des PDT definiert ist. Ein Beispiel finden Sie auf dieser Seite unter Inkrementelles SQL-basiertes PDT erstellen.
Darüber hinaus muss increment_key
Folgendes sein:
- Eine gekürzte absolute Zeit wie Tag, Monat, Jahr, Geschäftsquartal usw. Zeiträume wie der Wochentag werden nicht unterstützt.
- Ein Zeitstempel, der mit neuen Daten wie dem Erstellungsdatum der Bestellung vorhersagbar ansteigt. Mit anderen Worten: Ein Zeitstempel sollte nur dann als inkrementeller Schlüssel verwendet werden, wenn die neuesten Daten, die der Tabelle hinzugefügt wurden, auch den neuesten Zeitstempel haben. Ein Zeitstempel, z. B. der Geburtstag eines Nutzers, funktioniert nicht als inkrementeller Schlüssel, da der Zeitstempel eines Geburtsdatums nicht zuverlässig zunimmt, wenn der Tabelle neue Nutzer hinzugefügt werden.
inkrementellen LookML-basierten PDT erstellen
Um eine LookML-basierte (native) PDT in eine inkrementelle PDT umzuwandeln, verwenden Sie den Parameter increment_key
, um den Namen einer zeitbasierten LookML-Dimension anzugeben. Die Dimension muss in der Ansicht definiert werden, auf der die explore_source
des PDT basiert.
Hier ist beispielsweise eine Ansichtsdatei für eine PDT, die auf LookML basiert und den LookML-Parameter explore_source
verwendet. Das PDT wird aus dem flights
-Erkunden erstellt, der in diesem Fall auf der flights
-Ansicht basiert:
view: flights_lookml_incremental_pdt {
derived_table: {
indexes: ["id"]
increment_key: "departure_date"
increment_offset: 3
datagroup_trigger: flights_default_datagroup
distribution_style: all
explore_source: flights {
column: id {}
column: carrier {}
column: departure_date {}
}
}
dimension: id {
type: number
}
dimension: carrier {
type: string
}
dimension: departure_date {
type: date
}
}
Diese Tabelle wird vollständig erstellt, wenn zum ersten Mal eine Abfrage darin erfolgt. Danach wird die PDT in Schritten von einem Tag (increment_key: departure_date
) in drei Tagen (increment_offset: 3
) wieder erstellt.
Die Dimension departure_date
ist eigentlich der Zeitraum date
aus der Dimensionsgruppe departure
. Eine Übersicht der Funktionsweise von Dimensionsgruppen finden Sie auf der Dokumentationsseite zum Parameter dimension_group
. Dimensionsgruppe und Zeitraum sind in der Ansicht flights
definiert, also in der explore_source
für diese PDT. So wird die Dimensionsgruppe departure
in der Ansichtsdatei flights
definiert:
...
dimension_group: departure {
type: time
timeframes: [
raw,
date,
week,
month,
year
]
sql: ${TABLE}.dep_time ;;
}
...
Inkrementelle SQL-basierte PDT erstellen
Looker empfiehlt die Verwendung von LookML-basierten (nativen) abgeleiteten Tabellen als Grundlage für inkrementelle PDTs anstelle von SQL-basierten abgeleiteten Tabellen. Native abgeleitete Tabellen enthalten die komplexe Logik, die für inkrementelle PDTs erforderlich ist. SQL-basierte PDTs basieren auf manuell erstellter Logik, die bei hochkomplexer Funktionalität fehleranfällig ist.
Verwenden Sie zum Definieren eines inkrementellen SQL-basierten PDT increment_key
und (optional) increment_offset
wie bei einem LookML-basierten PDT. Da SQL-basierte PDT-Dateien jedoch nicht auf LookML-Ansichtsdateien basieren, gelten zusätzliche Anforderungen für die Umwandlung einer SQL-basierten PDT in eine inkrementelle PDT:
- Der inkrementelle Schlüssel muss auf einer zeitbasierten LookML-Dimension basieren, die Sie in der Ansichtsdatei des PDT definieren.
- Sie müssen im PDT einen Liquid-Filter vom Typ
angeben, um den Inkrementschlüssel mit der Datenbankzeitspalte zu verbinden, auf der der Inkrementschlüssel basiert. Der Filter{% incrementcondition %}
muss den Namen der Spalte in Ihrer Datenbank angeben, nicht einen SQL-Alias oder den Namen einer Dimension, die auf der Spalte basiert (siehe folgendes Beispiel).{% incrementcondition %}
Das grundlegende Format für den Liquid-Filter ist:
WHERE {% incrementcondition %} database_table_name.database_time_column {% endincrementcondition %}
Hier sehen Sie beispielsweise die Ansichtsdatei für eine SQL-basierte PDT, die in Schritten von einem Tag (increment_key: "dep_date"
) neu erstellt wird. Dabei werden Daten aus den letzten drei Tagen in die Tabelle aufgenommen, wenn sie neu erstellt wird (increment_offset: 3
):
view: sql_based_incremental_date_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "dep_date"
increment_offset: 3
distribution_style: all
sql: SELECT
flights.id2 AS "id",
flights.origin AS "origin",
DATE(flights.leaving_time ) AS "departure"
FROM public.flights AS flights
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
;;
}
dimension_group: dep {
type: time
timeframes: [raw, date, week, month, year]
datatype: timestamp
sql: ${TABLE}.departure
;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
Hinweise zu diesem Beispiel:
- Die abgeleitete Tabelle basiert auf einer SQL-Anweisung. Die SQL-Anweisung erstellt eine Spalte in der abgeleiteten Tabelle, die auf der Spalte
flights.leaving_time
in der Datenbank basiert. Die Spalte erhält den Aliasdeparture
. - In der Ansichtsdatei der PDT ist eine Dimensionsgruppe mit dem Namen
dep
definiert.- Der Parameter
sql
der Dimensionsgruppe gibt an, dass die Dimensionsgruppe auf der Spaltedeparture
in der abgeleiteten Tabelle basiert. - Der Parameter
timeframes
der Dimensionsgruppe enthältdate
als Zeitraum.
- Der Parameter
- Für die
increment_key
der abgeleiteten Tabelle wird die Dimensiondep_date
verwendet. Sie basiert auf demdate
-Zeitraum der Dimensionsgruppedep
. Eine Übersicht der Funktionsweise von Dimensionsgruppen finden Sie auf der Dokumentationsseite zum Parameterdimension_group
. - Mit dem Liquid-Filter
wird der Inkrementschlüssel mit der Spalte{% incrementcondition %}
flights.leaving_time
in der Datenbank verbunden.- Der
muss den Namen einer{% incrementcondition %}
TIMESTAMP
-Spalte in Ihrer Datenbank angeben (oder mit einerTIMESTAMP
-Spalte in Ihrer Datenbank auswerten). - Der
muss anhand der verfügbaren Elemente in der{% incrementcondition %}
FROM
-Klausel ausgewertet werden, die Ihr PDT definiert, z. B. Spalten aus der Tabelle, die in derFROM
-Klausel angegeben ist. kann nicht auf das Ergebnis der{% incrementcondition %}
SELECT
-Anweisung verweisen, z. B. auf einen Alias, der einer Spalte in der SQL-Anweisung zugewiesen wurde, oder auf den Namen einer Dimension, die auf der Spalte basiert. Im Beispiel oben ist{% incrementcondition %}
flights.leaving_time
. Da die KlauselFROM
die Tabelleflights
angibt, kann sich der auf Spalten aus der Tabelle{% incrementcondition %}
flights
beziehen. - Der
muss auf dieselbe Datenbankspalte verweisen, die für den inkrementellen Schlüssel verwendet wird. In diesem Beispiel ist der inkrementelle-Schlüssel{% incrementcondition %}
dep_date
, eine Dimension, die durch die Spaltedeparture
im PDT definiert wird. Das ist ein Alias für die Spalteflights.leaving_time
in der Datenbank. Daher verweist der Filter aufflights.leaving_time
:
- Der
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
Sie können der WHERE
-Klausel hinzufügen, um andere Filter zu erstellen. Wenn die Datenbanktabelle beispielsweise viele Jahre zurückreicht, können Sie einen Filter erstellen, damit der ursprüngliche Build der PDT nur nach einem bestimmten Datum verwendet. Für WHERE
wird ein PDT mit Daten ab dem 1. Januar 2020 erstellt:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
AND flights.leaving_time > '2020-01-01'
Sie können die WHERE
-Klausel auch verwenden, um Daten in SQL in einen Zeitstempel zu parsen und ihr einen Alias zuzuweisen. Der folgende inkrementelle PDT verwendet beispielsweise ein Inkrement von 15 Minuten, das auf text_column
basiert. Das sind Stringdaten, die in Zeitstempeldaten geparst wurden:
view: sql_based_incremental_15min_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_minute15"
increment_offset: 1
sql: SELECT PARSE_TIMESTAMP("%c", flights.text_column) as parsed_timestamp_column,
flights.id2 AS "id",
flights.origin AS "origin",
FROM public.flights AS flights
WHERE {% incrementcondition %} PARSE_TIMESTAMP("%c", flights.text_column)
{% endincrementcondition %} ;;
}
dimension_group: event {
type: time
timeframes: [raw, minute15, hour, date, week, month, year]
datatype: timestamp
sql: ${TABLE}.parsed_timestamp_column ;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
Sie können den Alias für SQL in der Dimensionsgruppe sql
verwenden, müssen dazu aber den SQL-Ausdruck in der WHERE
-Klausel verwenden. Da dann minute15
als Zeitraum in der Dimensionsgruppe event
festgelegt wurde, können Sie dann event_minute15
als inkrementellen Schlüssel verwenden, um den PDT um 15 Minuten zu erhöhen.
Inkrementelle zusammengefasste Tabelle erstellen
Wenn Sie eine inkrementelle zusammengefasste Tabelle erstellen möchten, fügen Sie unter dem Parameter materialization
des Parameters aggregate_table
increment_key
und (optional) increment_offset
hinzu. Verwenden Sie den Parameter increment_key
, um den Namen einer zeitbasierten LookML-Dimension anzugeben. Die Dimension muss in der Ansicht definiert werden, auf der die „Erkunden“-Tabelle basiert.
Diese zusammengefasste Tabelle basiert beispielsweise auf dem explorativen Analysetool accidents
, das in diesem Fall auf der Ansicht accidents
basiert. Die zusammengefasste Tabelle wird in Schritten von einer Woche (increment_key: event_week
) in zwei Wochen neu erstellt (increment_offset: 2
):
explore: accidents {
. . .
aggregate_table: accidents_daily {
query: {
dimensions: [event_date, id, weather_condition]
measures: [count]
}
materialization: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_week"
increment_offset: 2
}
}
}
Für den Schlüssel für die Erhöhung wird die Dimension event_week
verwendet. Sie basiert auf dem Zeitraum week
aus der Dimensionsgruppe event
. Eine Übersicht der Funktionsweise von Dimensionsgruppen finden Sie auf der Dokumentationsseite zum Parameter dimension_group
. Dimensionsgruppe und Zeitraum sind in der Ansicht accidents
definiert:
. . .
view: accidents {
. . .
dimension_group: event {
type: time
timeframes: [
raw,
date,
week,
year
]
sql: ${TABLE}.event_date ;;
}
. . .
}
Wichtige Punkte
Quelltabelle für zeitbasierte Abfragen optimieren
Achten Sie darauf, dass die Quelltabelle des inkrementellen PDT für zeitbasierte Abfragen optimiert ist. Insbesondere muss die zeitbasierte Spalte, die für den inkrementellen Schlüssel verwendet wird, eine Optimierungsstrategie wie Partitionierung, Sortierschlüssel, Indexe oder eine andere für Ihren Dialekt unterstützte Optimierungsstrategie haben. Eine Optimierung der Quelltabelle wird stark empfohlen. Mit jeder Aktualisierung der inkrementellen Tabelle fragt Looker die Quelltabelle ab, um die neuesten Werte der zeitbasierten Spalte zu bestimmen, die für den Inkrementschlüssel verwendet wird. Wenn die Quelltabelle nicht für diese Abfragen optimiert ist, kann die Abfrage der neuesten Werte von Looker langsam und teuer sein.
Unterstützte Datenbankdialekte für inkrementelle PDTs
Damit Looker inkrementelle PDTs in Ihrem Looker-Projekt unterstützen kann, muss Ihr Datenbankdialekt DDL-Befehle unterstützen, mit denen Zeilen gelöscht und eingefügt werden können.
Die folgende Tabelle zeigt, welche Dialekte in der neuesten Version von Looker inkrementelle PDTs unterstützen: