Mengonfigurasi tabel inkremental

Dokumen ini menunjukkan cara menggunakan Dataform core untuk mengonfigurasi tabel inkremental.

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

  1. Di konsol Google Cloud, buka halaman Dataform.

    Buka halaman Dataform

  2. Pilih atau buat repositori.

  3. Pilih atau buat ruang kerja pengembangan.

  4. 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:

  1. Buka ruang kerja pengembangan Anda.
  2. Di panel Files, luaskan definitions/.
  3. Buka file SQLX definisi tabel inkremental.
  4. 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
  5. 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:

  1. Buka ruang kerja pengembangan Anda.
  2. Di panel Files, luaskan definitions/.
  3. Pilih file SQLX definisi tabel inkremental
  4. Dalam blok config, tetapkan kolom yang dipilih sebagai uniqueKey dalam format berikut:

    uniqueKey: ["COLUMN_NAME"]
    

    Ganti COLUMN_NAME dengan nama kolom yang dipilih.

  5. 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:

  1. Buka ruang kerja pengembangan Anda.
  2. Di panel Files, luaskan definitions/.
  3. Pilih file SQLX definisi tabel inkremental
  4. Di blok pre_operations, deklarasikan variabel dengan skrip BigQuery.
  5. Filter pernyataan SELECT yang menentukan tabel dengan klausa WHERE yang mereferensikan variabel yang dideklarasikan.
  6. 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:

  1. Buka ruang kerja pengembangan Anda.
  2. Di panel Files, luaskan definitions/.
  3. Pilih file SQLX definisi tabel inkremental.
  4. Di blok config, masukkan protected: true.
  5. Opsional: Klik Format.

Contoh kode berikut menampilkan tabel inkremental yang ditandai sebagai protected:

config {
  type: "incremental",
  protected: true
}
SELECT ...

Langkah selanjutnya