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 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_key untuk PDT tidak bergantung pada pemicu persistensi PDT. Lihat halaman dokumentasi PDT Inkremental untuk 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 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 {% incrementcondition %} 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).

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_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 inkremental ke kolom flights.leaving_time dalam database.
    • {% incrementcondition %} harus menentukan nama kolom TIMESTAMP dalam database Anda (atau harus dievaluasi ke kolom TIMESTAMP dalam database Anda).
    • {% incrementcondition %} harus dievaluasi terhadap 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 yang digunakan untuk kunci inkremental. Dalam contoh ini, kunci inkrementalnya 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 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