sql_trigger_value

Penggunaan

view: my_view {
  derived_table: {
    sql_trigger_value: SELECT CURDATE() ;;
    ...
  }
}
Hierarki
sql_trigger_value
Nilai Default
Tidak ada

Menerima
Pernyataan SQL yang menghasilkan satu baris dan satu kolom

Definisi

Sebagai gantinya, pertimbangkan untuk menggunakan datagroup dan datagroup_trigger, yang dijelaskan di halaman dokumentasi Meng-cache kueri.

sql_trigger_value memungkinkan Anda memicu pembuatan ulang tabel turunan persisten berdasarkan pernyataan SQL yang Anda berikan. Jika hasil pernyataan SQL berbeda dari nilai sebelumnya, PDT akan dibuat ulang.

Parameter sql_trigger_value hanya akan mempertimbangkan baris dan kolom pertama dalam SQL yang Anda tulis. Oleh karena itu, sebaiknya tulis kueri Anda untuk menampilkan hanya satu nilai (satu baris dan satu kolom). Tindakan ini menghilangkan kebingungan bagi developer di masa mendatang dan melindungi dialek SQL non-streaming dari pemuatan set hasil besar ke dalam memori.

Secara default, setiap lima menit Looker menjalankan kueri SQL yang Anda tulis, selama tabel turunan persisten lainnya tidak dalam proses pembuatan. Jika hasil kueri SQL berubah, Looker akan membuat ulang tabel turunan. Anda dapat mengubah jadwal ini sesuai kebutuhan menggunakan setelan PDT And Datagroup Maintenance Schedule di setelan admin Looker.

Misalnya, Anda menjalankan MySQL dan menggunakan:

    sql_trigger_value: SELECT CURDATE() ;;

Hasilnya akan terlihat seperti:

Waktu Proses sql_trigger_value Hasil sql_trigger_value
2015-01-01 00:00 2015-01-01
2015-01-01 00:05 2015-01-01
2015-01-01 00.10 2015-01-01
... ...
2015-01-01 23:55 2015-01-01
02-01-2015 00.00 2015-01-02
2015-01-02 00:05 2015-01-02

Anda dapat melihat bahwa nilai kueri SQL ini akan berubah sekali per hari pada tengah malam, sehingga tabel turunan akan dibuat ulang pada waktu tersebut.

Looker tidak melakukan konversi zona waktu untuk sql_trigger_value. Saat Anda menggunakan sql_trigger_value untuk memicu pembangunan ulang PDT pada tengah malam atau pada waktu tertentu, pemicu akan terjadi di zona waktu yang dikonfigurasi untuk database Anda.

Jika admin telah memberi Anda izin develop, Anda dapat memaksa tabel turunan untuk dibuat ulang sebelum kueri sql_trigger_value-nya berubah. Pilih opsi Rebuild Derived Tables & Run dari menu roda gigi Explore actions setelah menjalankan kueri.

Lihat halaman dokumentasi Tabel turunan di Looker untuk mengetahui detail lebih lanjut tentang opsi Bangun Ulang Tabel Turunan & Jalankan.

Contoh

Buat PDT di MySQL yang dibangun ulang sekali per hari pada tengah malam:

view: clean_events {
  derived_table: {
    sql:
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff') ;;
    sql_trigger_value: SELECT CURDATE() ;;
  }
}

Bagian berikut menunjukkan SQL yang akan digunakan untuk berbagai strategi membangun ulang PDT pada dialek yang berbeda:

Google BigQuery

Jadwal Pembaruan yang Diinginkan SQL yang Akan Digunakan
Sekali sehari pada tengah malam Waktu Pasifik
SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles')
Sekali per hari pada jam tertentu
SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24))

Ganti "3" dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Dua kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 4am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4 dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Tiga kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
    THEN 'between 4am and 9am'
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 9am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4, 9, dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Setiap jam
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP())
Setiap 2 jam
SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60))

Anda dapat mengganti "2" dengan jumlah jam yang Anda inginkan di antara setiap regenerasi
Tidak pernah memperbarui data
SELECT 1

MySQL

Jadwal Pembaruan yang Diinginkan SQL yang Akan Digunakan
Sekali per hari pada tengah malam
SELECT CURDATE()
Sekali per hari pada jam tertentu Coordinated Universal Time (UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))

Ganti "3" dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Dua kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 4am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4 dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Tiga kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
    THEN 'between 4am and 9am'
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 9am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4, 9, dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Saat tabel tertentu diperbarui
SELECT COUNT(*) FROM table
Setiap jam
SELECT HOUR(CURTIME())
Setiap 2 jam Coordinated Universal Time (UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))

Anda dapat mengganti "2" dengan jumlah jam yang Anda inginkan di antara setiap regenerasi
Tidak pernah memperbarui data
SELECT 1

Amazon Redshift

Jadwal Pembaruan yang Diinginkan SQL yang Akan Digunakan
Sekali per hari pada tengah malam
SELECT CURRENT_DATE
Sekali per hari pada jam tertentu
SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24))

Ganti "3" dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Dua kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 4am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4 dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Tiga kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
    THEN 'between 4am and 9am'
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 9am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4, 9, dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Saat tabel tertentu diperbarui
SELECT COUNT(*) FROM table
Setiap jam
SELECT DATE_PART('hour', GETDATE())
Setiap 2 jam
SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60))

Anda dapat mengganti "2" dengan jumlah jam yang Anda inginkan di antara setiap regenerasi
Tidak pernah memperbarui data
SELECT 1

PostgreSQL

Jadwal Pembaruan yang Diinginkan SQL yang Akan Digunakan
Sekali per hari pada tengah malam
SELECT CURRENT_DATE
Sekali per hari pada jam tertentu
SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24))

Ganti "3" dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Dua kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 4am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4 dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Tiga kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
    THEN 'between 4am and 9am'
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 9am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4, 9, dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Saat tabel tertentu diperbarui
SELECT COUNT(*) FROM table
Setiap jam
SELECT DATE_PART('hour', NOW())
Setiap 2 jam
SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60))

Anda dapat mengganti "2" dengan jumlah jam yang Anda inginkan di antara setiap regenerasi
Tidak pernah memperbarui data
SELECT 1

Snowflake

Jadwal Pembaruan yang Diinginkan SQL yang Akan Digunakan
Sekali per hari pada tengah malam
SELECT CURRENT_DATE()
Sekali per hari pada jam tertentu Coordinated Universal Time (UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))

Ganti "3" dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Dua kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 4am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4 dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Tiga kali sehari pada jam tertentu
SELECT CASE
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
    THEN 'between 4am and 9am'
  WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
    THEN 'between 9am and 6pm'
  ELSE 'between 6pm and 4am'
END

Ganti 4, 9, dan 18 dengan jam dalam sehari yang Anda inginkan untuk regenerasi
Saat tabel tertentu diperbarui
SELECT COUNT(*) FROM table
Setiap jam
SELECT HOUR(CURRENT_TIME())
Setiap 2 jam Coordinated Universal Time (UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))

Anda dapat mengganti "2" dengan jumlah jam yang Anda inginkan di antara setiap regenerasi
Tidak pernah memperbarui data
SELECT 1

Tantangan umum

sql_trigger_value mengharuskan Anda telah menyiapkan tabel turunan persisten

Penggunaan sql_trigger_value akan menyebabkan error validasi LookML, kecuali jika Anda telah mengaktifkan persistensi untuk tabel turunan di setelan koneksi database. Sebagian besar pelanggan menyiapkan tabel turunan persisten saat pertama kali mengonfigurasi koneksi database. Pengecualian paling umum untuk aturan ini adalah bagi pelanggan yang menghubungkan Looker ke sekunder hot-swap hanya baca PostgreSQL.

sql_trigger_value berfungsi secara berbeda antara Mode Pengembangan dan Mode Produksi

sql_trigger_value akan berfungsi seperti yang diharapkan dalam Mode Produksi. Dalam Mode Pengembangan, semua tabel turunan diperlakukan seolah-olah persist_for: 24 hours telah digunakan, apa pun setelan yang telah Anda terapkan. Lihat bagian Tabel persisten dalam Mode Pengembangan di halaman dokumentasi Tabel turunan di Looker untuk mengetahui informasi selengkapnya.