Penggunaan
view: my_view {
derived_table: {
increment_key: "created_date"
...
}
}
|
Hierarki
increment_key- atau - increment_key |
Nilai Default
Tidak ada
Menerima
Nama dimensi LookML berbasis waktu
Aturan Khusus
increment_key hanya didukung dengan tabel persisten, dan hanya untuk dialek tertentu
|
Definisi
Anda dapat membuat PDT inkremental di project jika dialek Anda mendukungnya. PDT inkremental adalah tabel turunan persisten (PDT) yang dibuat Looker dengan menambahkan data baru ke tabel, bukan membangun ulang seluruh tabel. Lihat halaman dokumentasi PDT Inkremental untuk mengetahui informasi selengkapnya.
increment_key adalah parameter yang membuat PDT menjadi PDT inkremental dengan menentukan inkremen waktu yang datanya harus dikueri dan ditambahkan ke PDT. Selain increment_key, Anda dapat secara opsional memberikan increment_offset untuk menentukan jumlah periode waktu sebelumnya (pada perincian kunci inkremental) yang dibangun ulang untuk memperhitungkan data yang terlambat tiba.
increment_keyuntuk PDT tidak bergantung pada pemicu persistensi PDT. Lihat halaman dokumentasi PDT Inkremental untuk beberapa contoh skenario yang menunjukkan interaksiincrement_key,increment_offset, dan strategi persistensi.Parameter
increment_keyhanya berfungsi dengan dialek yang didukung, dan hanya dengan tabel yang memiliki strategi persistensi, seperti PDT dan tabel gabungan (yang merupakan jenis PDT).
increment_key harus menentukan dimensi LookML berbasis waktu:
- Untuk PDT berbasis LookML,
increment_keyharus didasarkan pada dimensi LookML yang ditentukan dalam tampilan yang menjadi dasarexplore_sourcePDT. Lihat bagian Membuat PDT inkremental berbasis LookML di halaman ini untuk melihat contohnya. - Untuk tabel gabungan,
increment_keyharus didasarkan pada dimensi LookML yang ditentukan dalam tampilan yang menjadi dasar Eksplorasi tabel gabungan. Lihat bagian Membuat tabel agregat inkremental di halaman ini untuk melihat contohnya. - Untuk PDT berbasis SQL,
increment_keyharus didasarkan pada dimensi LookML yang ditentukan di dalam file tampilan PDT. Lihat Membuat PDT berbasis SQL inkremental di halaman ini untuk melihat contohnya.
Selain itu, increment_key harus:
- Waktu absolut yang dipangkas, seperti hari, bulan, tahun, kuartal fiskal, dan sebagainya. Rentang waktu seperti hari dalam seminggu tidak didukung.
- Stempel waktu yang meningkat secara terprediksi dengan data baru, seperti tanggal pembuatan pesanan. Dengan kata lain, stempel waktu hanya boleh digunakan sebagai kunci inkremental jika data terbaru yang ditambahkan ke tabel juga memiliki stempel waktu terbaru. Stempel waktu seperti tanggal lahir pengguna tidak akan berfungsi sebagai kunci inkremental, karena stempel waktu tanggal lahir tidak meningkat secara andal dengan pengguna baru yang ditambahkan ke tabel.
Membuat PDT berbasis LookML inkremental
Untuk membuat PDT berbasis LookML (asli) menjadi PDT inkremental, gunakan parameter increment_key untuk menentukan nama dimensi LookML berbasis waktu. Dimensi harus ditentukan dalam tampilan tempat explore_source PDT didasarkan.
Misalnya, berikut adalah file tampilan untuk PDT berdasarkan LookML, menggunakan parameter LookML explore_source. PDT dibuat dari Eksplorasi flights, yang dalam hal ini didasarkan pada tampilan flights:
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
}
}
Tabel ini akan dibuat sepenuhnya saat kueri dijalankan untuk pertama kalinya. Setelah itu, PDT akan dibangun ulang dengan inkrementasi satu hari (increment_key: departure_date), kembali ke tiga hari (increment_offset: 3).
Dimensi departure_date sebenarnya adalah jangka waktu date dari grup dimensi departure. (Lihat halaman dokumentasi parameter dimension_group untuk mengetahui ringkasan cara kerja grup dimensi.) Grup dimensi dan jangka waktu ditentukan dalam tampilan flights, yang merupakan explore_source untuk PDT ini. Berikut cara grup dimensi departure ditentukan dalam file tampilan flights:
...
dimension_group: departure {
type: time
timeframes: [
raw,
date,
week,
month,
year
]
sql: ${TABLE}.dep_time ;;
}
...
Membuat PDT berbasis SQL inkremental
Looker menyarankan agar Anda menggunakan tabel turunan berbasis LookML (native) sebagai dasar untuk PDT inkremental, bukan menggunakan tabel turunan berbasis SQL. Tabel turunan native secara inheren menangani logika kompleks yang diperlukan untuk PDT inkremental. PDT berbasis SQL mengandalkan logika yang dibuat secara manual, yang rentan terhadap kesalahan saat digunakan dengan fungsi yang sangat kompleks.
Untuk menentukan PDT berbasis SQL inkremental, gunakan increment_key dan (opsional) increment_offset seperti yang Anda lakukan pada PDT berbasis LookML. Namun, karena PDT berbasis SQL tidak didasarkan pada file tampilan LookML, ada persyaratan tambahan untuk membuat PDT berbasis SQL menjadi PDT inkremental:
- Anda harus mendasarkan kunci inkremental pada dimensi LookML berbasis waktu yang Anda tentukan dalam file tampilan PDT.
- Anda harus memberikan filter Liquid
di PDT untuk menghubungkan kunci inkremental ke kolom waktu database yang menjadi dasar kunci inkremental. Filter{% incrementcondition %} harus menentukan nama kolom dalam database Anda, bukan alias SQL atau nama dimensi yang didasarkan pada kolom (lihat contoh berikut).{% incrementcondition %}
Format dasar untuk filter Liquid adalah:
WHERE {% incrementcondition %} database_table_name.database_time_column {% endincrementcondition %}
Misalnya, berikut adalah file tampilan untuk PDT berbasis SQL yang dibangun ulang dalam inkrement satu hari (increment_key: "dep_date"), dengan data dari tiga hari terakhir akan ditambahkan ke tabel saat dibangun ulang (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: [date, week, month, year]
datatype: date
sql: ${TABLE}.departure
;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
Perhatikan hal berikut tentang contoh ini:
- Tabel turunan didasarkan pada pernyataan SQL. Pernyataan SQL membuat kolom dalam tabel turunan yang didasarkan pada kolom
flights.leaving_timedalam database. Kolom diberi aliasdeparture. - File tampilan PDT menentukan grup dimensi yang disebut
dep.- Parameter
sqlgrup dimensi menunjukkan bahwa grup dimensi didasarkan pada kolomdeparturedalam tabel turunan. - Parameter
timeframesgrup dimensi menyertakandatesebagai jangka waktu.
- Parameter
increment_keytabel turunan menggunakan dimensidep_date, yang merupakan dimensi berdasarkan jangka waktudatedari grup dimensidep. (Lihat halaman dokumentasi parameterdimension_groupuntuk mengetahui ringkasan cara kerja grup dimensi.)- Filter Liquid
digunakan untuk menghubungkan kunci inkremental ke kolom{% incrementcondition %}flights.leaving_timedalam database. harus menentukan nama kolom{% incrementcondition %}TIMESTAMPdalam database Anda (atau harus dievaluasi ke kolomTIMESTAMPdalam database Anda). harus dievaluasi terhadap apa yang tersedia dalam klausa{% incrementcondition %}FROMyang menentukan PDT Anda, seperti kolom dari tabel yang ditentukan dalam klausaFROM. tidak dapat merujuk ke hasil pernyataan{% incrementcondition %}SELECT, seperti alias yang telah diberikan ke kolom dalam pernyataan SQL, atau nama dimensi yang didasarkan pada kolom. Dalam contoh ini, adalah{% incrementcondition %}flights.leaving_time. Karena klausaFROMmenentukan tabelflights, dapat merujuk ke kolom dari tabel{% incrementcondition %}flights. harus mengarah ke kolom database yang sama yang digunakan untuk kunci inkremental. Dalam contoh ini, kunci inkrementalnya adalah{% incrementcondition %}dep_date, dimensi yang ditentukan oleh kolomdeparturedi PDT, yang merupakan alias untuk kolomflights.leaving_timedi database. Oleh karena itu, filter mengarah keflights.leaving_time:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
Anda dapat menambahkan klausa WHERE untuk membuat filter lain. Misalnya, jika tabel database sudah ada selama bertahun-tahun, Anda dapat membuat filter sehingga build awal PDT hanya menggunakan data setelah tanggal tertentu. WHERE ini membuat PDT dengan data dari setelah 1 Januari 2020:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
AND flights.leaving_time > '2020-01-01'
Anda juga dapat menggunakan klausa WHERE untuk mengurai data dalam SQL menjadi stempel waktu, lalu memberinya alias. Misalnya, PDT inkremental berikut menggunakan inkrement 15 menit yang didasarkan pada text_column, yang merupakan data string yang telah diuraikan menjadi data stempel waktu:
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
}
}
Anda dapat menggunakan alias untuk SQL dalam definisi grup dimensi sql, tetapi Anda harus menggunakan ekspresi SQL dalam klausa WHERE. Kemudian, karena minute15 disiapkan sebagai jangka waktu dalam grup dimensi event, Anda dapat menggunakan event_minute15 sebagai kunci inkremental untuk mendapatkan inkremental 15 menit untuk PDT.
Membuat tabel gabungan inkremental
Untuk membuat tabel gabungan inkremental, tambahkan increment_key dan (opsional) increment_offset di bagian parameter materialization dari parameter aggregate_table. Gunakan parameter increment_key untuk menentukan nama dimensi LookML berbasis waktu. Dimensi harus ditentukan dalam tampilan yang menjadi dasar Eksplorasi tabel gabungan.
Misalnya, tabel gabungan ini didasarkan pada Eksplorasi accidents, yang dalam hal ini didasarkan pada tampilan accidents. Tabel gabungan dibangun kembali dalam inkremen satu minggu (increment_key: event_week), kembali ke dua minggu (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
}
}
}
Kunci inkremental menggunakan dimensi event_week, yang didasarkan pada jangka waktu week dari grup dimensi event. (Lihat halaman dokumentasi parameter dimension_group untuk mengetahui ringkasan cara kerja grup dimensi.) Grup dimensi dan jangka waktu ditentukan dalam tampilan accidents:
. . .
view: accidents {
. . .
dimension_group: event {
type: time
timeframes: [
raw,
date,
week,
year
]
sql: ${TABLE}.event_date ;;
}
. . .
}
Hal-hal yang perlu dipertimbangkan
Mengoptimalkan tabel sumber untuk kueri berbasis waktu
Pastikan tabel sumber PDT inkremental dioptimalkan untuk kueri berbasis waktu. Secara khusus, kolom berbasis waktu yang digunakan untuk kunci inkremental harus memiliki strategi pengoptimalan, seperti partisi, kunci pengurutan, indeks, atau strategi pengoptimalan apa pun yang didukung untuk dialek Anda. Pengoptimalan tabel sumber sangat direkomendasikan karena setiap kali tabel inkremental diperbarui, Looker akan membuat kueri tabel sumber untuk menentukan nilai terbaru kolom berbasis waktu yang digunakan untuk kunci inkremental. Jika tabel sumber tidak dioptimalkan untuk kueri ini, kueri Looker untuk nilai terbaru mungkin lambat dan mahal.
Dialek database yang didukung untuk PDT inkremental
Agar Looker mendukung PDT inkremental di project Looker Anda, dialek database Anda harus mendukung perintah Bahasa Definisi Data (DDL) yang memungkinkan penghapusan dan penyisipan baris.
Tabel berikut menunjukkan dialek mana yang mendukung PDT inkremental dalam rilis Looker terbaru:
| Dialek | Didukung? |
|---|---|
| Actian Avalanche | |
| Amazon Athena | |
| Amazon Aurora MySQL | |
| Amazon Redshift | |
| Amazon Redshift 2.1+ | |
| Amazon Redshift Serverless 2.1+ | |
| Apache Druid | |
| Apache Druid 0.13+ | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| Cloudera Impala 3.1+ | |
| Cloudera Impala 3.1+ with Native Driver | |
| Cloudera Impala with Native Driver | |
| DataVirtuality | |
| Databricks | |
| Denodo 7 | |
| Denodo 8 & 9 | |
| Dremio | |
| Dremio 11+ | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud PostgreSQL | |
| Google Cloud SQL | |
| Google Spanner | |
| Greenplum | |
| HyperSQL | |
| IBM Netezza | |
| MariaDB | |
| Microsoft Azure PostgreSQL | |
| Microsoft Azure SQL Database | |
| Microsoft Azure Synapse Analytics | |
| Microsoft SQL Server 2008+ | |
| Microsoft SQL Server 2012+ | |
| Microsoft SQL Server 2016 | |
| Microsoft SQL Server 2017+ | |
| MongoBI | |
| MySQL | |
| MySQL 8.0.12+ | |
| Oracle | |
| Oracle ADWC | |
| PostgreSQL 9.5+ | |
| PostgreSQL pre-9.5 | |
| PrestoDB | |
| PrestoSQL | |
| SAP HANA | |
| SAP HANA 2+ | |
| SingleStore | |
| SingleStore 7+ | |
| Snowflake | |
| Teradata | |
| Trino | |
| Vector | |
| Vertica |