Ringkasan Dataform

Dokumen ini memperkenalkan konsep dan proses Dataform.

Dataform adalah layanan bagi analis data untuk mengembangkan, menguji, mengontrol versi, dan menjadwalkan alur kerja yang kompleks untuk transformasi data di BigQuery.

Dataform memungkinkan Anda mengelola transformasi data dalam proses Ekstraksi, Pemuatan, dan Transformasi (ELT) untuk integrasi data. Setelah data mentah diekstrak dari sistem sumber dan dimuat ke BigQuery, Dataform membantu Anda mengubahnya menjadi serangkaian tabel data yang terdefinisi dengan baik, diuji, dan didokumentasikan.

Dataform memungkinkan Anda melakukan tindakan transformasi data berikut:

  • Mengembangkan dan menjalankan alur kerja untuk transformasi data.
  • Berkolaborasi dengan anggota tim dalam pengembangan alur kerja melalui Git.
  • Mengelola sejumlah besar tabel dan dependensinya.
  • Deklarasikan data sumber dan kelola dependensi tabel.
  • Melihat visualisasi pohon dependensi alur kerja Anda.
  • Mengelola data dengan kode SQL di repositori pusat.
  • Gunakan kembali kode dengan JavaScript.
  • Uji kebenaran data dengan pengujian kualitas pada tabel sumber dan output.
  • Mengontrol versi kode SQL.
  • Mendokumentasikan tabel data di dalam kode SQL.

Proses transformasi data di Dataform

Alur kerja transformasi data untuk Dataform adalah sebagai berikut:

  1. Dengan Dataform, Anda dapat membuat repositori untuk mengelola kode.
  2. Dataform memungkinkan Anda membuat ruang kerja untuk pengembangan.
  3. Dataform memungkinkan Anda mengembangkan alur kerja di ruang kerja pengembangan.
  4. Dataform mengompilasi inti Dataform menjadi SQL.
  5. Dataform mengeksekusi hierarki dependensi.

Dengan Dataform, Anda dapat membuat repositori untuk mengelola kode

Di repositori Dataform, Anda menggunakan Dataform core, ekstensi SQL, untuk menulis file SQLX tempat Anda menentukan alur kerja. Repositori Dataform mendukung kontrol versi. Anda dapat menautkan repositori Dataform ke penyedia Git pihak ketiga.

Dataform memungkinkan Anda membuat ruang kerja untuk pengembangan

Anda dapat membuat ruang kerja pengembangan di dalam repositori Dataform untuk pengembangan inti Dataform. Di ruang kerja pengembangan, Anda dapat membuat perubahan pada repositori, mengompilasi, menguji, dan mengirimkannya ke repositori utama melalui Git.

Dataform memungkinkan Anda mengembangkan Dataform inti di ruang kerja pengembangan

Di ruang kerja pengembangan, Anda dapat menentukan dan mendokumentasikan tabel, dependensinya, dan logika transformasi untuk membangun alur kerja. Anda juga dapat mengonfigurasi tindakan di JavaScript.

Dataform mengompilasi inti Dataform

Selama kompilasi, Dataform menjalankan tugas berikut:

  • Mengompilasi inti Dataform menjadi alur kerja SQL Standar.
  • Menambahkan pernyataan SQL boilerplate, seperti CREATE TABLE atau INSERT, ke kode inline dengan konfigurasi kueri Anda.
  • Mengompilasi (mengompilasi sumber ke sumber) JavaScript menjadi SQL.
  • Menyelesaikan dependensi dan memeriksa error, termasuk dependensi yang hilang atau sirkular.
  • Membangun hierarki dependensi semua tindakan yang akan dijalankan di BigQuery.

Kompilasi Dataform bersifat hermetik untuk memverifikasi konsistensi kompilasi, yang berarti bahwa kode yang sama akan 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.

Untuk melakukan debug secara real-time, Anda dapat memeriksa alur kerja yang dikompilasi dari project Anda dalam grafik interaktif di ruang kerja pengembangan.

Dataform mengeksekusi hierarki dependensi

Di BigQuery, Dataform melakukan tugas berikut:

  • Mengeksekusi perintah SQL, mengikuti urutan pohon dependensi.
  • Menjalankan kueri pernyataan terhadap tabel dan tampilan Anda untuk memeriksa kebenaran data.
  • Mengeksekusi operasi SQL lain yang Anda tentukan.

Setelah eksekusi, Anda dapat menggunakan tabel dan tampilan untuk semua tujuan analisis Anda.

Anda dapat melihat log untuk melihat tabel yang dibuat, apakah pernyataan lulus atau gagal, berapa lama waktu yang diperlukan untuk menyelesaikan setiap tindakan, dan informasi lainnya. Anda juga dapat melihat kode SQL persisnya yang dijalankan di BigQuery.

Fitur Dataform

Dengan Dataform, Anda dapat mengembangkan dan men-deploy tabel, tabel inkremental, atau tampilan ke BigQuery. Dataform menawarkan lingkungan web untuk aktivitas berikut:

  • Pengembangan alur kerja
  • Koneksi dengan GitHub, GitLab, Azure DevOps Services, dan Bitbucket
  • Continuous integration dan deployment berkelanjutan
  • Eksekusi alur kerja

Bagian berikut menjelaskan fitur utama Dataform.

Repositori

Setiap project Dataform disimpan di repositori. Repositori Dataform menyimpan kumpulan file konfigurasi JSON, file SQLX, dan file JavaScript.

Repositori Dataform berisi jenis file berikut:

  • File konfigurasi

    File JSON atau SQLX konfigurasi memungkinkan Anda mengonfigurasi alur kerja. File ini berisi konfigurasi umum, jadwal eksekusi, atau skema untuk membuat tabel dan tampilan baru.

  • Definisi

    Definisi adalah file SQLX dan JavaScript yang menentukan tabel, tampilan, dan operasi SQL tambahan yang akan dijalankan di BigQuery.

  • Termasuk

    Include adalah file JavaScript tempat Anda dapat menentukan variabel dan fungsi untuk digunakan dalam project Anda.

Setiap repositori Dataform terhubung ke akun layanan. Anda dapat memilih akun layanan saat membuat repositori atau mengedit akun layanan nanti.

Secara default, Dataform menggunakan akun layanan yang berasal dari nomor project Anda dalam format berikut:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Kontrol versi

Dataform menggunakan sistem kontrol versi Git untuk menyimpan catatan setiap perubahan yang dilakukan pada file project dan untuk mengelola versi file.

Setiap repositori Dataform dapat mengelola repositori Git-nya sendiri, atau terhubung ke repositori Git pihak ketiga jarak jauh. Anda dapat menghubungkan repositori Dataform ke repositori GitHub, GitLab, Azure DevOps Services, atau Bitbucket.

Pengguna mengontrol versi kode alur kerja mereka di dalam ruang kerja Dataform. Di ruang kerja Dataform, Anda dapat menarik perubahan dari repositori, melakukan semua atau beberapa perubahan yang dipilih, dan mengirimkannya ke cabang Git repositori.

Pengembangan alur kerja

Di Dataform, Anda membuat perubahan pada file dan direktori di dalam ruang kerja pengembangan. Ruang kerja pengembangan adalah salinan virtual yang dapat diedit dari konten repositori Git. Dataform mempertahankan status file di ruang kerja pengembangan Anda di antara sesi.

Di ruang kerja pengembangan, Anda dapat mengembangkan tindakan alur kerja SQL dengan menggunakan Dataform core dengan SQLX dan JavaScript, atau khususnya dengan JavaScript. Anda dapat memformat kode JavaScript atau inti Dataform secara otomatis.

Setiap elemen alur kerja Dataform, seperti tabel atau pernyataan, sesuai dengan tindakan yang dilakukan Dataform di BigQuery. Misalnya, file definisi tabel adalah tindakan membuat atau memperbarui tabel di BigQuery.

Di ruang kerja Dataform, Anda dapat mengembangkan tindakan alur kerja berikut:

Anda dapat menggunakan JavaScript untuk menggunakan kembali kode alur kerja Dataform dengan cara berikut:

Dataform mengompilasi kode alur kerja di ruang kerja Anda secara real-time. Di ruang kerja, Anda dapat melihat kueri yang dikompilasi dan detail tindakan di setiap file. Anda juga dapat melihat status kompilasi dan error di file yang diedit atau di repositori.

Untuk menguji output kueri SQL yang dikompilasi sebelum Anda mengeksekusinya ke BigQuery, Anda dapat menjalankan pratinjau kueri di ruang kerja Dataform.

Untuk memeriksa seluruh alur kerja yang ditentukan di ruang kerja, Anda dapat melihat grafik interaktif yang dikompilasi yang menunjukkan semua tindakan yang dikompilasi dalam alur kerja dan hubungan di antaranya.

Kompilasi alur kerja

Dataform menggunakan setelan kompilasi default, yang dikonfigurasi dalam file setelan alur kerja, untuk mengompilasi kode alur kerja di ruang kerja Anda menjadi SQL secara real-time, sehingga membuat hasil kompilasi ruang kerja.

Anda dapat mengganti setelan kompilasi untuk menyesuaikan cara Dataform mengompilasi alur kerja Anda menjadi hasil kompilasi.

Dengan penggantian kompilasi ruang kerja, Anda dapat mengonfigurasi penggantian kompilasi untuk semua ruang kerja di repositori. Anda dapat menetapkan penggantian ruang kerja dinamis untuk membuat hasil kompilasi kustom untuk setiap ruang kerja, sehingga mengubah ruang kerja menjadi lingkungan pengembangan terisolasi. Anda dapat mengganti project Google Cloud tempat Dataform akan menjalankan isi ruang kerja, menambahkan awalan ke nama semua tabel yang dikompilasi, dan menambahkan akhiran ke skema default.

Dengan konfigurasi rilis, Anda dapat mengonfigurasi template setelan kompilasi untuk membuat hasil kompilasi repositori Dataform. Dalam konfigurasi rilis, Anda dapat mengganti project Google Cloud tempat Dataform akan menjalankan hasil kompilasi, menambahkan awalan ke nama semua tabel yang dikompilasi, menambahkan akhiran ke skema default, dan menambahkan variabel kompilasi. Anda juga dapat menetapkan frekuensi pembuatan hasil kompilasi. Untuk menjadwalkan eksekusi hasil kompilasi yang dibuat dalam konfigurasi rilis yang dipilih, Anda dapat membuat konfigurasi alur kerja.

Eksekusi alur kerja

Selama eksekusi alur kerja, Dataform menjalankan hasil kompilasi alur kerja untuk membuat atau memperbarui aset di BigQuery.

Untuk membuat atau memuat ulang tabel dan tampilan yang ditentukan dalam alur kerja di BigQuery, Anda dapat memulai eksekusi alur kerja secara manual di ruang kerja pengembangan atau menjadwalkan eksekusi.

Anda dapat menjadwalkan eksekusi Dataform di BigQuery dengan cara berikut:

Untuk men-debug error, Anda dapat memantau eksekusi dengan cara berikut:

Inti Dataform

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

Anda dapat menggunakan Dataform core untuk tujuan berikut:

  • Menentukan tabel, tampilan, tampilan terwujud, atau tabel inkremental.
  • Mendefinisikan 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 memverifikasi konsistensi data.

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

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

Untuk menggunakan inti Dataform, Anda menulis 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 Anda jalankan di BigQuery.

Kompilasi Dataform bersifat hermetik untuk memverifikasi konsistensi kompilasi, yang berarti bahwa kode yang sama akan 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 config dan isi. Semua properti konfigurasi, dan blok konfigurasi itu sendiri, bersifat opsional. Dengan demikian, file SQL biasa apa pun adalah file SQLX yang valid dan dieksekusi Dataform apa adanya.

Di blok config, Anda dapat melakukan tindakan berikut:

Menentukan metadata kueri

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

Data dokumen

Anda dapat mendokumentasikan tabel dan kolomnya langsung di blok config. Dokumentasi tabel Anda 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 config ke pohon dependensi alur kerja Anda setelah pembuatan tabel. Anda juga dapat menentukan pernyataan di luar blok config, dalam file SQLX terpisah.

Contoh kode berikut menunjukkan cara menentukan jenis tabel output, mendokumentasikan tabel, dan menentukan uji 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

Di isi file SQLX, Anda dapat melakukan tindakan berikut:

Menentukan tabel

Untuk menentukan tabel baru, Anda dapat menggunakan pernyataan SQL SELECT 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 meng-hard code skema dan nama tabel dari tabel data Anda.

Dataform menggunakan fungsi ref untuk membuat hierarki dependensi semua tabel yang akan dibuat atau diperbarui. 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 mengetahui informasi selengkapnya tentang pengelolaan dependensi tambahan, misalnya, mengeksekusi kode secara kondisional, menggunakan fungsi bawaan inti Dataform lainnya, lihat referensi inti Dataform.

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"
}

Melakukan enkapsulasi kode SQL

Untuk menentukan fungsi yang dapat digunakan kembali guna membuat 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 "..."

Batasan

Dataform memiliki batasan umum berikut:

  • Dataform di Google Cloud berjalan di runtime V8 biasa dan tidak mendukung kemampuan dan modul tambahan yang disediakan oleh Node.js. Jika codebase yang ada memerlukan modul Node.js, Anda harus menghapus dependensi ini.

    Project tanpa kolom nama di package.json menghasilkan perbedaan pada package-lock.json setiap kali paket diinstal. Untuk menghindari hasil ini, Anda perlu menambahkan properti name di package.json.

  • URL git+https:// untuk dependensi di package.json tidak didukung.

    Konversi URL tersebut menjadi URL arsip https:// biasa. Misalnya, konversi git+https://github.com/dataform-co/dataform-segment.git#1.5 menjadi https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • Menjalankan pengujian unit secara manual tidak tersedia.

  • Penelusuran konten file di ruang kerja pengembangan tidak tersedia.

  • Mulai dari Dataform core 3.0.0., Dataform tidak mendistribusikan image Docker. Anda dapat membuat image Docker Dataform Anda sendiri, yang dapat Anda gunakan untuk menjalankan perintah CLI Dataform yang setara. Untuk membuat image Docker Anda sendiri, lihat Mengontainerkan aplikasi dalam dokumentasi Docker.

  • Metode Dataform API berikut tidak mematuhi pedoman AIP.134 dengan memperlakukan entri karakter pengganti * sebagai permintaan yang buruk dan dengan memperbarui semua kolom, bukan kolom yang ditetapkan, saat field_mask dihilangkan:

Langkah berikutnya