Ringkasan Dataform core

Dokumen ini memperkenalkan Dataform core dan menunjukkan cara menggunakannya dalam Dataform.

Ringkasan Dataform core

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

Anda dapat menggunakan Dataform core untuk tujuan berikut:

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

Di Dataform, Anda menggunakan Dataform core 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 Dataform core secara lokal melalui Dataform CLI di luar Google Cloud.

Untuk menggunakan Dataform core, tulis file SQLX. Setiap file SQLX berisi kueri yang menentukan relasi database yang dibuat dan diperbarui Dataform di dalam BigQuery.

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

Kompilasi bentuk data bersifat hermetis untuk memastikan konsistensi kompilasi, artinya 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, semua file SQL biasa adalah file SQLX valid yang Dataform dieksekusi apa adanya.

Di blok konfigurasi, Anda dapat melakukan tindakan berikut:

Menentukan metadata kueri

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

Data dokumen

Anda dapat mendokumentasikan tabel dan kolomnya secara langsung di blok konfigurasi. Dokumentasi tabel Anda dikirim langsung ke BigQuery. Anda bisa 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 khusus. Formulir data menambahkan pernyataan yang ditentukan di blok konfigurasi ke hierarki dependensi alur kerja 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 uji kualitas di 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:

Tentukan tabel

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

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

Formulir data menggunakan fungsi ref untuk mem-build hierarki dependensi dari semua tabel yang akan dibuat atau diupdate. Setelah dikompilasi, Dataform 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 mengeksekusi kode secara bersyarat, menggunakan fungsi bawaan inti Dataform lainnya, lihat Referensi inti Bentuk data.

Menentukan operasi SQL tambahan

Untuk mengonfigurasi Dataform agar 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"
}

Mengenkapsulasi kode SQL

Untuk menentukan fungsi yang dapat digunakan kembali guna membuat bagian kode SQL 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 pun 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