increment_key

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_key untuk PDT tidak bergantung pada pemicu persistensi PDT. Lihat halaman dokumentasi PDT Inkremental untuk mengetahui beberapa contoh skenario yang menunjukkan interaksi increment_key, increment_offset, dan strategi persistensi.

Parameter increment_key hanya 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:

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 {% incrementcondition %} 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).

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_time dalam database. Kolom diberi alias departure.
  • File tampilan PDT menentukan grup dimensi yang disebut dep.
    • Parameter sql grup dimensi menunjukkan bahwa grup dimensi didasarkan pada kolom departure dalam tabel turunan.
    • Parameter timeframes grup dimensi menyertakan date sebagai jangka waktu.
  • increment_key tabel turunan menggunakan dimensi dep_date, yang merupakan dimensi berdasarkan jangka waktu date dari grup dimensi dep. (Lihat halaman dokumentasi parameter dimension_group untuk mengetahui ringkasan cara kerja grup dimensi.)
  • Filter Liquid {% incrementcondition %} digunakan untuk menghubungkan kunci inkremen ke kolom flights.leaving_time di database.
    • {% incrementcondition %} harus menentukan nama kolom TIMESTAMP di database Anda (atau harus dievaluasi ke kolom TIMESTAMP di database Anda).
    • {% incrementcondition %} harus mengevaluasi apa yang tersedia dalam klausa FROM yang menentukan PDT Anda, seperti kolom dari tabel yang ditentukan dalam klausa FROM. {% incrementcondition %} tidak dapat merujuk ke hasil pernyataan SELECT, seperti alias yang telah diberikan ke kolom dalam pernyataan SQL, atau nama dimensi yang didasarkan pada kolom. Dalam contoh ini, {% incrementcondition %} adalah flights.leaving_time. Karena klausa FROM menentukan tabel flights, {% incrementcondition %} dapat merujuk ke kolom dari tabel flights.
    • {% incrementcondition %} harus mengarah ke kolom database yang sama dengan yang digunakan untuk kunci penambahan. Dalam contoh ini, kunci inkremental adalah dep_date, dimensi yang ditentukan oleh kolom departure di PDT, yang merupakan alias untuk kolom flights.leaving_time di database. Oleh karena itu, filter mengarah ke flights.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