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 tabel secara keseluruhan. Lihat halaman dokumentasi PDT Inkremental untuk mengetahui informasi selengkapnya.
increment_key adalah parameter yang membuat PDT menjadi PDT inkremental dengan menentukan penambahan waktu untuk data baru yang harus dikueri dan ditambahkan ke PDT. Selain increment_key, Anda dapat memberikan increment_offset secara opsional untuk menentukan jumlah jangka waktu sebelumnya (pada perincian kunci inkremental) yang dibuat ulang untuk memperhitungkan data yang terlambat masuk.
increment_keyuntuk PDT tidak bergantung pada pemicu persistensi PDT. Lihat halaman dokumentasi PDT Inkremental untuk mengetahui 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 berbasis LookML inkremental di halaman ini untuk mengetahui contohnya. - Untuk tabel gabungan,
increment_keyharus didasarkan pada dimensi LookML yang ditentukan dalam tampilan yang menjadi dasar Eksplorasi tabel gabungan. Lihat bagian Membuat tabel gabungan inkremental di halaman ini untuk mengetahui 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 mengetahui contohnya.
Selain itu, increment_key harus:
- Waktu absolut yang dipotong, seperti hari, bulan, tahun, atau kuartal fiskal. Rentang waktu seperti hari dalam seminggu tidak didukung.
- Stempel waktu yang meningkat secara dapat diprediksi 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 seiring penambahan pengguna baru ke tabel.
Membuat PDT berbasis LookML inkremental
Untuk membuat PDT berbasis LookML (native) menjadi PDT inkremental, gunakan parameter increment_key untuk menentukan nama dimensi LookML berbasis waktu. Dimensi harus ditentukan dalam tampilan yang menjadi dasar explore_source PDT.
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 tabel virtual 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 secara keseluruhan saat kueri dijalankan untuk pertama kalinya. Setelah itu, PDT akan dibangun ulang dalam penambahan satu hari (increment_key: departure_date), dan mundur 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 tabel virtual 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 error saat digunakan dengan fungsi yang sangat kompleks.
Untuk menentukan PDT berbasis SQL inkremental, gunakan increment_key dan (opsional) increment_offset seperti yang Anda lakukan dengan 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 penambahan pada dimensi LookML berbasis waktu yang Anda tentukan dalam file tampilan PDT.
- Anda harus memberikan filter Liquid
di PDT untuk menghubungkan kunci penambahan ke kolom waktu database yang menjadi dasar kunci penambahan. 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 tabel virtual untuk PDT berbasis SQL yang dibuat ulang secara bertahap dalam satu hari (increment_key: "dep_date"), dengan data dari tiga hari terakhir akan ditambahkan ke tabel saat dibuat 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-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 inkremen ke kolom{% incrementcondition %}flights.leaving_timedi database. harus menentukan nama kolom{% incrementcondition %}TIMESTAMPdi database Anda (atau harus dievaluasi ke kolomTIMESTAMPdi database Anda). harus mengevaluasi 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 dengan yang digunakan untuk kunci penambahan. Dalam contoh ini, kunci inkremental 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 di SQL menjadi stempel waktu, lalu memberinya alias. Misalnya, PDT inkremental berikut menggunakan penambahan 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 inkremen untuk mendapatkan inkremen 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 Explore accidents, yang dalam hal ini didasarkan pada tampilan accidents. Tabel gabungan dibuat ulang secara bertahap dalam 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 inkremen menggunakan dimensi event_week, yang didasarkan pada jangka waktu week dari grup dimensi event. (Lihat halaman dokumentasi parameter dimension_group untuk 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 mengkueri tabel sumber untuk menentukan nilai terbaru dari 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 dapat mendukung PDT inkremental dalam project Looker Anda, dialek database Anda harus mendukung perintah Bahasa Definisi Data (DDL) yang memungkinkan penghapusan dan penyisipan baris.
Tabel berikut menunjukkan dialek 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.x - 0.17.x | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| ClickHouse 26+ | |
| 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+ | |
| Dremio 26+ with Arrow Flight SQL | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud AlloyDB for PostgreSQL | |
| 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 | |
| MongoSQL | |
| 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 |