Tentang tabel inkremental
Formulir data memperbarui tabel secara berbeda berdasarkan jenis tabel. Selama setiap eksekusi tabel atau tampilan, Dataform akan mem-build ulang seluruh tabel atau tampilan dari awal.
Saat Anda menentukan tabel inkremental, Dataform akan mem-build tabel inkremental dari awal hanya untuk pertama kalinya. Selama eksekusi berikutnya, Dataform hanya menyisipkan atau menggabungkan baris baru ke dalam tabel inkremental sesuai dengan kondisi yang Anda konfigurasi.
Dataform hanya menyisipkan baris baru ke dalam kolom yang sudah ada di tabel inkremental. Jika Anda membuat perubahan pada kueri definisi tabel inkremental — misalnya, menambahkan kolom baru — Anda harus membuat ulang tabel dari awal. Untuk melakukannya, saat berikutnya Anda memicu eksekusi tabel, pilih opsi Run with full refresh.
Berikut adalah beberapa kasus penggunaan umum untuk tabel inkremental:
- Pengoptimalan performa
- Untuk beberapa jenis data, seperti log web atau data analisis, sebaiknya Anda hanya memproses data baru, bukan memproses ulang seluruh tabel.
- Pengurangan latensi
- Anda dapat menggunakan tabel inkremental untuk menjalankan alur kerja dengan cepat, tetapi sering, yang mengurangi latensi downstream pada tabel output.
- Snapshot harian
- Anda dapat mengonfigurasi tabel inkremental untuk membuat snapshot harian dari data tabel, misalnya, untuk analisis longitudinal setelan pengguna yang tersimpan dalam database produksi.
Sebelum memulai
Di konsol Google Cloud, buka halaman Dataform.
Pilih atau buat repositori.
Pilih atau buat ruang kerja pengembangan.
Buat tabel dengan jenis tabel
incremental
.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan guna mengonfigurasi tabel tambahan, minta administrator untuk memberi Anda peran IAM Dataform Editor (roles/dataform.editor
) di ruang kerja.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Memproses subset baris dalam tabel inkremental
Untuk menentukan subset baris Formulir Data yang akan diproses selama setiap
eksekusi, tambahkan klausa WHERE
bersyarat ke file definisi SQLX
tabel inkremental.
Untuk mengonfigurasi tabel inkremental, ikuti langkah-langkah berikut:
- Buka ruang kerja pengembangan Anda.
- Di panel Files, luaskan
definitions/
. - Buka file SQLX definisi tabel inkremental.
Masukkan klausa
WHERE
dalam format berikut:config { type: "incremental" } SELECT_STATEMENT ${when(incremental(), `WHERE CONDITION`) }
Ganti kode berikut:
- SELECT_STATEMENT: pernyataan
SELECT
yang menentukan tabel Anda - CONDITION: kondisi Anda untuk klausa
WHERE
yang memilih baris untuk Dataform yang akan diproses selama eksekusi tabel
- SELECT_STATEMENT: pernyataan
Opsional: Klik Format.
Contoh kode berikut menampilkan tabel inkremental yang memproses baris tabel productiondb.logs
secara bertahap:
config { type: "incremental" }
SELECT timestamp, message FROM ${ref("productiondb", "logs")}
${when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Contoh kode berikut menampilkan tabel inkremental yang membuat snapshot
dari tabel productiondb.customers
:
config { type: "incremental" }
SELECT CURRENT_DATE() AS snapshot_date, customer_id, name, account_settings FROM ${ref("productiondb", "customers")}
${when(incremental(), `WHERE snapshot_date > (SELECT MAX(snapshot_date) FROM ${self()})`) }
Menggabungkan baris dalam tabel inkremental
Untuk memastikan tabel inkremental hanya berisi satu baris yang sesuai dengan
kombinasi kolom yang dipilih, tetapkan kolom yang dipilih sebagai uniqueKey
untuk
menggabungkan baris yang memiliki uniqueKey
yang sama. Saat memperbarui tabel, Formulir data akan menggabungkan baris dengan uniqueKey
, bukan menambahkannya.
Untuk mengonfigurasi penggabungan dalam tabel inkremental, ikuti langkah-langkah berikut:
- Buka ruang kerja pengembangan Anda.
- Di panel Files, luaskan
definitions/
. - Pilih file SQLX definisi tabel inkremental
Dalam blok
config
, tetapkan kolom yang dipilih sebagaiuniqueKey
dalam format berikut:uniqueKey: ["COLUMN_NAME"]
Ganti COLUMN_NAME dengan nama kolom yang dipilih.
Opsional: Klik Format.
Contoh kode berikut menampilkan tabel inkremental dengan kolom transaction_id
ditetapkan sebagai uniqueKey
untuk memastikannya selalu berisi satu baris:
config {
type: "incremental",
uniqueKey: ["transaction_id"]
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Memfilter baris dalam tabel inkremental
Dalam tabel berpartisi inkremental, agar Dataform tidak memindai
seluruh tabel guna menemukan baris yang cocok, tetapkan updatePartitionFilter
agar hanya mempertimbangkan
subset data.
Contoh kode berikut menunjukkan tabel berpartisi inkremental dengan penggabungan
yang dikonfigurasi dengan menetapkan properti uniqueKey
dan updatePartitionFilter
:
config {
type: "incremental",
uniqueKey: ["transaction_id"],
bigquery: {
partitionBy: "DATE(timestamp)",
updatePartitionFilter:
"timestamp >= timestamp_sub(current_timestamp(), interval 24 hour)"
}
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Menghindari pemindaian tabel penuh saat menyerap dari tabel yang dipartisi
Saat membuat tabel inkremental yang mereferensikan tabel yang dipartisi, sebaiknya buat kueri tabel untuk menghindari pemindaian tabel penuh pada tabel yang dipartisi selama setiap update inkremental.
Anda dapat membatasi jumlah partisi yang dipindai BigQuery untuk memperbarui tabel inkremental menggunakan ekspresi konstanta dalam kueri tabel Anda. Untuk mengubah nilai dari tabel yang dipartisi menjadi ekspresi
konstan, gunakan skrip BigQuery untuk
mendeklarasikan nilai sebagai variabel dalam blok pre_operations
.
Kemudian, gunakan variabel tersebut sebagai ekspresi konstanta dalam klausa WHERE
dalam kueri SELECT
.
Dengan konfigurasi ini, Dataform akan memperbarui tabel inkremental berdasarkan partisi terbaru dari tabel berpartisi yang direferensikan, tanpa memindai seluruh tabel.
Untuk mengonfigurasi tabel inkremental yang merujuk ke tabel yang dipartisi dan menghindari pemindaian tabel penuh, ikuti langkah-langkah berikut:
- Buka ruang kerja pengembangan Anda.
- Di panel Files, luaskan
definitions/
. - Pilih file SQLX definisi tabel inkremental
- Di blok
pre_operations
, deklarasikan variabel dengan skrip BigQuery. - Filter pernyataan
SELECT
yang menentukan tabel dengan klausaWHERE
yang mereferensikan variabel yang dideklarasikan. - Opsional: Klik Format.
Contoh kode berikut menunjukkan tabel inkremental tempat tabel raw_events
yang direferensikan dipartisi oleh event_timestamp
:
config {
type: "incremental",
}
pre_operations {
DECLARE event_timestamp_checkpoint DEFAULT (
${when(incremental(),
`SELECT max(event_timestamp) FROM ${self()}`,
`SELECT timestamp("2000-01-01")`)}
)
}
SELECT
*
FROM
${ref("raw_events")}
WHERE event_timestamp > event_timestamp_checkpoint
Pada contoh kode sebelumnya, variabel event_timestamp_checkpoint
ditentukan dalam blok pre_operations
.
Variabel event_timestamp_checkpoint
kemudian digunakan sebagai ekspresi konstan
dalam klausa WHERE
.
Membuat ulang tabel inkremental dari awal dengan refresh penuh
Anda dapat memaksa tabel inkremental untuk dibuat ulang dari awal menggunakan
antarmuka command line dengan opsi --full-refresh
atau dengan opsi Jalankan dengan refresh penuh saat
memicu eksekusi alur kerja.
Saat Anda memilih opsi refresh sepenuhnya, di ruang kerja pengembangan atau dengan menggunakan Dataform CLI, Dataform akan mengabaikan parameter ${when(incremental(), ... }
selama eksekusi dan membuat ulang tabel dengan pernyataan CREATE OR REPLACE
.
Melindungi tabel inkremental dari pemuatan ulang penuh
Untuk melindungi tabel inkremental agar tidak dibuat ulang dari awal dan kemungkinan
hilangnya data, Anda dapat menetapkan tabel inkremental sebagai protected
. Anda mungkin ingin mencegah tabel inkremental dibuat ulang jika sumber data Anda bersifat sementara.
Untuk menandai tabel inkremental sebagai protected
, ikuti langkah-langkah berikut:
- Buka ruang kerja pengembangan Anda.
- Di panel Files, luaskan
definitions/
. - Pilih file SQLX definisi tabel inkremental.
- Di blok
config
, masukkanprotected: true
. - Opsional: Klik Format.
Contoh kode berikut menampilkan tabel inkremental yang ditandai sebagai protected
:
config {
type: "incremental",
protected: true
}
SELECT ...
Langkah selanjutnya
- Untuk mempelajari cara menentukan tabel, lihat Membuat tabel.
- Untuk mempelajari cara menggunakan antarmuka command line Dataform, lihat Menggunakan CLI Dataform.
- Untuk mempelajari cara memicu eksekusi secara manual, lihat Memicu eksekusi.