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
datagroupdandatagroup_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 menggunakansql_trigger_valueuntuk 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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)) |
| 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 |
| 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 |
| 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)) |
| 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.