Ringkasan Dataform

Dokumen ini memperkenalkan konsep dan proses Dataform kepada Anda.

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 di-ekstrasi dari sistem sumber dan dimuat ke BigQuery, Dataform membantu Anda mengubahnya menjadi rangkaian 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 banyak tabel dan dependensinya.
  • Mendeklarasikan data sumber dan mengelola dependensi tabel.
  • Lihat visualisasi hierarki dependensi alur kerja Anda.
  • Mengelola data dengan kode SQL di repositori pusat.
  • Menggunakan kembali kode dengan JavaScript.
  • Uji kebenaran data dengan pengujian kualitas pada tabel sumber dan output.
  • Kontrol 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. Dataform memungkinkan Anda 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 core Dataform ke dalam SQL.
  5. Dataform mengeksekusi hierarki dependensi.

Dataform memungkinkan Anda membuat repositori untuk mengelola kode

Di repositori Dataform, Anda menggunakan inti Dataform, 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 workspace pengembangan, Anda dapat membuat perubahan pada repositori, mengompilasi, menguji, dan mengirimkannya ke repositori utama melalui Git.

Dataform memungkinkan Anda mengembangkan inti Dataform di ruang kerja pengembangan

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

Dataform mengompilasi inti Dataform

Selama kompilasi, Dataform akan menjalankan tugas berikut:

  • Mengompilasi inti Dataform ke dalam alur kerja SQL Standar.
  • Menambahkan pernyataan SQL boilerplate, seperti CREATE TABLE atau INSERT, ke kode inline dengan konfigurasi kueri Anda.
  • Mentranspile (mengompilasi source-to-source) JavaScript menjadi SQL.
  • Menyelesaikan dependensi dan memeriksa error, termasuk dependensi yang hilang atau sirkular.
  • Membuat hierarki dependensi dari semua tindakan yang akan dijalankan 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.

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

Dataform mengeksekusi hierarki dependensi

Di BigQuery, Dataform melakukan tugas berikut:

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

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

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 yang tepat 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 baru untuk dijalankan di BigQuery.

  • Mencakup

    Includes adalah file JavaScript tempat Anda dapat menentukan variabel dan fungsi yang akan digunakan dalam project.

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 mempertahankan catatan setiap perubahan yang dibuat 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 commit semua atau perubahan yang dipilih, dan mendorongnya 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 menggunakan inti Dataform dengan SQLX dan JavaScript, atau secara eksklusif 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 dalam file yang diedit atau di repositori.

Untuk menguji output kueri SQL yang dikompilasi sebelum menjalankannya 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 kompilasi interaktif yang menampilkan semua tindakan yang dikompilasi dalam alur kerja dan hubungan di antara tindakan tersebut.

Kompilasi alur kerja

Dataform menggunakan setelan kompilasi default, yang dikonfigurasi dalam file setelan alur kerja, untuk mengompilasi kode alur kerja di ruang kerja Anda ke SQL secara real time, sehingga menghasilkan 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 dalam repositori. Anda dapat menetapkan penggantian ruang kerja dinamis untuk membuat hasil kompilasi kustom untuk setiap ruang kerja, sehingga mengubah ruang kerja menjadi lingkungan pengembangan yang terisolasi. Anda dapat mengganti project Google Cloud tempat Dataform akan mengeksekusi konten 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 mengeksekusi hasil kompilasi, menambahkan awalan ke nama semua tabel yang dikompilasi, menambahkan akhiran 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 mengeksekusi 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 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 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 inti Dataform secara lokal melalui CLI Dataform di luar Google Cloud.

Untuk menggunakan inti Dataform, Anda 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 dijalankan 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 "..."

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 akan menghasilkan perbedaan di 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.

    Konversikan URL tersebut ke URL arsip https:// biasa. Misalnya, konversikan git+https://github.com/dataform-co/dataform-segment.git#1.5 ke https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • Pengujian unit yang dijalankan secara manual tidak tersedia.

  • Penelusuran konten file di ruang kerja pengembangan tidak tersedia.

  • Mulai 3.0.0. inti Dataform, Dataform tidak mendistribusikan image Docker. Anda dapat mem-build image Docker Dataform sendiri, yang dapat digunakan untuk menjalankan perintah CLI Dataform yang setara. Untuk mem-build image Docker Anda sendiri, lihat Mengemas aplikasi dalam container dalam dokumentasi Docker.

  • Metode Dataform API berikut tidak mematuhi panduan 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 selanjutnya