Tentang tabel inkremental
Dataform 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 konfigurasikan.
Dataform hanya menyisipkan baris baru ke kolom yang sudah ada di tabel inkremental. Jika Anda membuat perubahan pada kueri definisi tabel inkremental — misalnya, menambahkan kolom baru — Anda harus mem-build ulang tabel dari awal. Untuk melakukannya, saat berikutnya Anda memicu eksekusi tabel, pilih opsi Jalankan dengan pembaruan penuh.
Berikut adalah beberapa kasus penggunaan umum untuk tabel inkremental:
- Pengoptimalan performa
- Untuk beberapa jenis data, seperti log web atau data analisis, Anda mungkin ingin hanya memproses data baru, bukan memproses ulang seluruh tabel.
- Pengurangan latensi
- Anda dapat menggunakan tabel inkremental untuk menjalankan alur kerja dengan cepat, tetapi sering, sehingga mengurangi latensi downstream tabel output.
- Ringkasan harian
- Anda dapat mengonfigurasi tabel inkremental untuk membuat snapshot harian data tabel, misalnya, untuk analisis longitudinal setelan pengguna yang disimpan dalam database produksi.
Sebelum memulai
Di konsol Google Cloud , buka halaman Dataform.
Pilih atau buat repositori.
Pilih atau buat ruang kerja pengembangan.
Buat tabel dari jenis tabel
incremental
.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mengonfigurasi tabel inkremental,
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 ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Memproses subset baris dalam tabel inkremental
Untuk menentukan subkumpulan baris yang akan diproses Dataform selama setiap
eksekusi, tambahkan klausa WHERE
bersyarat ke file definisi SQLX tabel
inkremental. Dalam klausa WHERE
,
Anda dapat menentukan kondisi inkremental dan kondisi non-inkremental.
Dataform menerapkan kondisi inkremental selama eksekusi tabel
tanpa refresh penuh, dan kondisi non-inkremental selama eksekusi
dengan refresh penuh.
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 INCREMENTAL_CONDITION`, `WHERE NON_INCREMENTAL_CONDITION`) }
Ganti kode berikut:
- SELECT_STATEMENT: pernyataan
SELECT
yang menentukan tabel Anda INCREMENTAL_CONDITION: kondisi yang Anda tentukan dalam klausa
WHERE
untuk memilih baris yang akan diproses Dataform selama eksekusi tabel tanpa refresh penuh.NON_INCREMENTAL_CONDITION: kondisi yang Anda tentukan dalam klausa
WHERE
untuk memilih baris yang akan diproses Dataform selama eksekusi tabel dengan pembaruan penuh.
- SELECT_STATEMENT: pernyataan
Opsional: Klik Format.
Contoh kode berikut menunjukkan tabel inkremental yang secara bertahap
memproses baris tabel productiondb.logs
:
config { type: "incremental" }
SELECT timestamp, message FROM ${ref("productiondb", "logs")}
${when(incremental(),
`WHERE date > (SELECT MAX(date) FROM ${self()}) AND country = "UK"`,
`WHERE country = "UK"`)}
Contoh kode berikut menunjukkan tabel inkremental yang membuat snapshot
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 bahwa 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, Dataform 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/
. - Memilih file SQLX definisi tabel inkremental
Di 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 menunjukkan tabel inkremental dengan kolom transaction_id
ditetapkan sebagai uniqueKey
untuk memastikan tabel tersebut 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 yang dipartisi inkremental, agar Dataform tidak memindai
seluruh tabel untuk menemukan baris yang cocok, tetapkan updatePartitionFilter
agar hanya mempertimbangkan
subkumpulan kumpulan data.
Contoh kode berikut menunjukkan tabel partisi 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 berpartisi, sebaiknya buat kueri tabel untuk menghindari pemindaian tabel lengkap dari tabel berpartisi selama setiap pembaruan inkremental.
Anda dapat membatasi jumlah partisi yang dipindai BigQuery untuk memperbarui
tabel inkremental menggunakan ekspresi konstan dalam
kueri tabel. Untuk mengubah nilai dari tabel berpartisi menjadi ekspresi konstan, gunakan skrip BigQuery untuk mendeklarasikan nilai sebagai variabel dalam blok pre_operations
.
Kemudian, gunakan variabel sebagai ekspresi konstan dalam klausa WHERE
dalam
kueri SELECT
.
Dengan konfigurasi ini, Dataform akan memperbarui tabel inkremental berdasarkan partisi terbaru dari tabel berpartisi yang dirujuk, tanpa memindai seluruh tabel.
Untuk mengonfigurasi tabel inkremental yang mereferensikan tabel berpartisi dan menghindari pemindaian tabel penuh, ikuti langkah-langkah berikut:
- Buka ruang kerja pengembangan Anda.
- Di panel Files, luaskan
definitions/
. - Memilih 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
Dalam contoh kode sebelumnya, variabel event_timestamp_checkpoint
ditentukan dalam blok pre_operations
.
Variabel event_timestamp_checkpoint
kemudian digunakan sebagai ekspresi konstan
dalam klausa WHERE
.
Mem-build ulang tabel inkremental dari awal dengan pembaruan penuh
Anda dapat memaksa tabel inkremental untuk dibuat ulang dari awal menggunakan antarmuka command line dengan opsi --full-refresh
atau dengan opsi Run with full refresh saat memicu eksekusi alur kerja.
Saat Anda memilih opsi refresh penuh, 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 pembaruan penuh
Untuk melindungi tabel inkremental agar tidak dibuat ulang dari awal dan potensi
hilangnya data, Anda dapat menetapkan tabel inkremental sebagai protected
. Anda mungkin ingin mencegah tabel inkremental di-build 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 menunjukkan 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.