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:
- Dengan Dataform, Anda dapat membuat repositori untuk mengelola kode.
- Dataform memungkinkan Anda membuat ruang kerja untuk pengembangan.
- Dataform memungkinkan Anda mengembangkan alur kerja di ruang kerja pengembangan.
- Dataform mengompilasi inti Dataform menjadi SQL.
- 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
atauINSERT
, 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:
- Deklarasi data sumber
- Tabel dan tampilan
- Tabel inkremental
- Partisi dan cluster tabel
- Dependensi antar-tindakan
- Dokumentasi tabel
- Operasi SQL kustom
- Label BigQuery
- Tag kebijakan BigQuery
- Tag Dataform
- Pengujian kualitas data, yang disebut pernyataan
Anda dapat menggunakan JavaScript untuk menggunakan kembali kode alur kerja Dataform dengan cara berikut:
- Di seluruh file dengan enkapsulasi kode
- Di seluruh repositori dengan menyertakan
- Di seluruh repositori dengan paket
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:
- Buat konfigurasi alur kerja untuk menjadwalkan eksekusi hasil kompilasi yang dibuat dalam konfigurasi rilis
- Menjadwalkan eksekusi dengan Cloud Composer
- Menjadwalkan eksekusi dengan Workflows dan Cloud Scheduler
Untuk men-debug error, Anda dapat memantau eksekusi dengan cara berikut:
- Melihat log eksekusi Dataform mendetail
- Melihat log audit untuk Dataform
- Melihat log Cloud Logging untuk Dataform
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:
- Tentukan tabel dan dependensinya.
- Tentukan operasi SQL tambahan yang akan dijalankan di BigQuery.
- Buat kode SQL dengan JavaScript.
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 padapackage-lock.json
setiap kali paket diinstal. Untuk menghindari hasil ini, Anda perlu menambahkan propertiname
dipackage.json
.URL
git
+https://
untuk dependensi dipackage.json
tidak didukung.Konversi URL tersebut menjadi URL arsip
https://
biasa. Misalnya, konversigit+https://github.com/dataform-co/dataform-segment.git#1.5
menjadihttps://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, saatfield_mask
dihilangkan:
Langkah berikutnya
- Untuk mempelajari lebih lanjut siklus proses kode di Dataform, lihat Pengantar siklus proses kode di Dataform.
- Untuk mempelajari repositori Dataform lebih lanjut, lihat Pengantar repositori.
- Untuk mempelajari ruang kerja Dataform lebih lanjut, lihat Membuat ruang kerja pengembangan Dataform.
- Untuk mempelajari lebih lanjut cara mengembangkan alur kerja di Dataform, lihat Pengantar alur kerja SQL.
- Untuk mempelajari Dataform CLI lebih lanjut, lihat Menggunakan Dataform CLI.