Ringkasan core Dataform

Dokumen ini memperkenalkan inti Dataform dan menunjukkan cara menggunakannya di Dataform.

Ringkasan core Dataform

Inti Dataform adalah meta-bahasa open source untuk membuat tabel dan alur kerja SQL. Dataform core memperluas SQL dengan menyediakan sistem manajemen dependensi, pengujian kualitas data otomatis, dan dokumentasi data.

Anda dapat menggunakan inti Dataform untuk tujuan berikut:

  • Menentukan tabel, tampilan, tampilan terwujud, atau tabel inkremental.
  • Menentukan logika transformasi data.
  • Mendeklarasikan data sumber dan mengelola dependensi tabel.
  • Mendokumentasikan deskripsi tabel dan kolom di dalam kode.
  • Menggunakan kembali fungsi dan variabel di berbagai kueri.
  • Menulis pernyataan data untuk memastikan konsistensi data.

Di Dataform, Anda menggunakan inti Dataform untuk mengembangkan alur kerja SQL dan men-deploy aset ke BigQuery.

Inti Dataform adalah bagian dari framework pemodelan data Dataform open source yang juga menyertakan Dataform CLI. Anda dapat mengompilasi dan menjalankan core Dataform secara lokal melalui CLI Dataform di luar Google Cloud.

Untuk menggunakan inti Dataform, Anda harus menulis file SQLX. Setiap file SQLX berisi kueri yang menentukan hubungan database yang dibuat dan diupdate Dataform di dalam BigQuery.

Dataform mengompilasi kode inti Dataform secara real time untuk membuat hasil kompilasi SQL yang dapat Anda jalankan di BigQuery.

Kompilasi Dataform bersifat hermetis untuk memastikan konsistensi kompilasi, yang berarti bahwa kode yang sama dikompilasi ke hasil kompilasi SQL yang sama setiap saat. Dataform mengompilasi kode Anda di lingkungan sandbox tanpa akses internet. Tidak ada tindakan tambahan, seperti memanggil API eksternal, yang tersedia selama kompilasi.

Blok konfigurasi file SQLX

File SQLX terdiri dari blok konfigurasi dan isi. Semua properti konfigurasi, dan blok konfigurasi itu sendiri, bersifat opsional. Dengan demikian, file SQL biasa adalah file SQLX yang valid dan dieksekusi Dataform apa adanya.

Di blok konfigurasi, Anda dapat melakukan tindakan berikut:

Menentukan metadata kueri

Anda dapat mengonfigurasi cara Dataform mewujudkan kueri ke BigQuery, misalnya jenis tabel output, database target, atau label menggunakan metadata konfigurasi.

Data dokumen

Anda dapat mendokumentasikan tabel dan kolomnya langsung di blok konfigurasi. Dokumentasi tabel Anda akan dikirim langsung ke BigQuery. Anda dapat mengurai dokumentasi ini dan mengirimkannya ke alat lain.

Menentukan pengujian kualitas data

Anda dapat menentukan pengujian kualitas data, yang disebut pernyataan, untuk memeriksa keunikan, nilai null, atau kondisi kustom. Dataform menambahkan pernyataan yang ditentukan dalam blok konfigurasi ke hierarki dependensi alur kerja Anda setelah pembuatan tabel. Anda juga dapat menentukan pernyataan di luar blok konfigurasi, dalam file SQLX terpisah.

Contoh kode berikut menunjukkan cara menentukan jenis tabel output, mendokumentasikan tabel, dan menentukan pengujian kualitas dalam blok konfigurasi file SQLX.

config {
  type: "table",
    description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order e.g. sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment e.g. pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
    assertions: {
    uniqueKey: ["id"]
  }
}

Isi file SQLX

Dalam isi file SQLX, Anda dapat melakukan tindakan berikut:

Menentukan tabel

Untuk menentukan tabel baru, Anda dapat menggunakan pernyataan SELECT SQL dan fungsi ref.

Fungsi ref adalah fungsi bawaan SQLX yang penting untuk pengelolaan dependensi di Dataform. Fungsi ref memungkinkan Anda mereferensikan tabel yang ditentukan dalam project Dataform, bukan melakukan hard code pada skema dan nama tabel tabel data Anda.

Dataform menggunakan fungsi ref untuk membuat hierarki dependensi dari semua tabel yang akan dibuat atau diperbarui. Setelah dikompilasi, Dataform akan menambahkan pernyataan boilerplate seperti CREATE, REPLACE, atau INSERT.

Contoh kode berikut menunjukkan cara mereferensikan tabel dalam file SQLX dengan fungsi ref.

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

Outputnya mirip dengan hal berikut ini:

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

Untuk informasi selengkapnya tentang pengelolaan dependensi tambahan, misalnya, menjalankan kode secara kondisional, menggunakan fungsi bawaan core Dataform lainnya, lihat Referensi core Dataform.

Menentukan operasi SQL tambahan

Untuk mengonfigurasi Dataform guna menjalankan satu atau beberapa pernyataan SQL sebelum atau setelah membuat tabel atau tampilan, Anda dapat menentukan operasi pra-kueri dan pasca-kueri.

Contoh kode berikut menunjukkan cara mengonfigurasi izin akses tabel atau tampilan dalam operasi pasca-kueri.

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

Melakukan enkapsulasi kode SQL

Untuk menentukan fungsi yang dapat digunakan kembali guna menghasilkan bagian kode SQL yang berulang, Anda dapat menggunakan blok JavaScript. Anda dapat menggunakan kembali kode yang ditentukan dalam blok JavaScript hanya di dalam file SLQX tempat blok ditentukan. Untuk menggunakan kembali kode di seluruh repositori, Anda dapat membuat include.

Untuk mengubah kueri secara dinamis, Anda dapat menggunakan JavaScript inline di mana saja dalam isi.

Contoh kode berikut menunjukkan cara menentukan blok JavaScript dalam file SQLX dan menggunakannya secara inline di dalam kueri:

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

Langkah selanjutnya