Dokumen ini menyajikan informasi berikut tentang repositori Dataform:
- Ringkasan praktik terbaik repositori di Dataform
- Ringkasan ukuran repositori
- Memisahkan repositori
- Menyusun kode dalam repositori
Ringkasan praktik terbaik repositori di Dataform
Bagian ini menyajikan ringkasan praktik terbaik untuk mengelola ukuran repositori, struktur repositori, dan siklus proses kode di Dataform.
Praktik terbaik untuk ukuran repositori
Ukuran repositori memengaruhi beberapa aspek pengembangan di Dataform, seperti berikut:
- Kolaborasi
- Keterbacaan codebase
- Proses pengembangan
- Kompilasi alur kerja
- Eksekusi alur kerja
Dataform memberlakukan kuota dan batas API pada resource kompilasi. Ukuran repositori yang besar dapat menyebabkan repositori Anda melampaui kuota dan batas ini. Hal ini dapat menyebabkan kompilasi dan eksekusi alur kerja Anda gagal.
Untuk mengurangi risiko tersebut, sebaiknya pisahkan repositori besar. Saat memisahkan repositori besar, Anda membagi alur kerja besar menjadi sejumlah alur kerja yang lebih kecil yang ditempatkan di repositori berbeda dan dihubungkan oleh dependensi lintas repositori.
Dengan pendekatan ini, Anda dapat mematuhi kuota dan batas Dataform, menerapkan proses dan izin yang terperinci, serta meningkatkan keterbacaan dan kolaborasi codebase. Namun, mengelola repositori terpisah bisa lebih sulit daripada mengelola satu repositori.
Untuk mempelajari lebih lanjut dampak ukuran repositori di Dataform, lihat Ringkasan ukuran repositori. Untuk mempelajari lebih lanjut praktik terbaik dalam memisahkan repositori, lihat Memisahkan repositori.
Praktik terbaik untuk struktur repositori
Sebaiknya susun file di direktori definitions
untuk mencerminkan
tahapan alur kerja Anda. Perlu diingat bahwa Anda dapat menerapkan struktur kustom yang paling sesuai dengan kebutuhan Anda.
Struktur subdirektori definitions
yang direkomendasikan berikut mencerminkan
tahapan utama sebagian besar alur kerja:
sources
untuk menyimpan deklarasi sumber data.intermediate
untuk menyimpan logika transformasi data.output
untuk menyimpan definisi tabel output.extras
(opsional) untuk menyimpan file tambahan.
Nama semua file di Dataform harus sesuai dengan
pedoman penamaan tabel BigQuery. Sebaiknya nama file
di direktori definitions
dalam repositori Dataform mencerminkan
struktur subdirektori.
Untuk mempelajari lebih lanjut praktik terbaik dalam menyusun dan memberi nama file di repositori, lihat Menyusun kode dalam repositori.
Praktik terbaik untuk siklus proses kode
Siklus proses kode default di Dataform terdiri dari fase berikut:
Pengembangan kode alur kerja di ruang kerja Dataform.
Anda dapat mengembangkan dengan Dataform core atau khususnya dengan JavaScript.
Kompilasi kode Anda menjadi hasil kompilasi menggunakan setelan dari file setelan alur kerja.
Anda dapat mengonfigurasi hasil kompilasi kustom dengan konfigurasi rilis dan penggantian kompilasi ruang kerja.
Dengan konfigurasi rilis, Anda dapat mengonfigurasi hasil kompilasi kustom dari seluruh repositori Anda. Anda dapat menjadwalkan eksekusinya nanti di konfigurasi alur kerja.
Dengan penggantian kompilasi ruang kerja, Anda dapat mengonfigurasi penggantian kompilasi untuk semua ruang kerja di repositori Anda, sehingga membuat hasil kompilasi kustom dari setiap ruang kerja.
Eksekusi hasil kompilasi di BigQuery.
Anda dapat menjadwalkan eksekusi atau hasil kompilasi repositori dengan konfigurasi alur kerja.
Untuk mengelola siklus proses kode di Dataform, Anda dapat membuat lingkungan eksekusi seperti pengembangan, staging, dan produksi.
Untuk mempelajari lebih lanjut siklus proses kode di Dataform, lihat Pengantar siklus proses kode di Dataform.
Anda dapat memilih untuk menyimpan lingkungan eksekusi di satu repositori, atau di beberapa repositori.
Lingkungan eksekusi dalam satu repositori
Anda dapat membuat lingkungan eksekusi terpisah seperti pengembangan, penyiapan, dan produksi dalam satu repositori Dataform dengan penggantian kompilasi ruang kerja dan konfigurasi rilis.
Anda dapat membuat lingkungan eksekusi terisolasi dengan cara berikut:
- Membagi tabel pengembangan dan produksi menurut skema.
- Membagi tabel pengembangan dan produksi menurut skema dan Google Cloud project.
- Membagi tabel pengembangan, staging, dan produksi menurut Google Cloud project.
Kemudian, Anda dapat menjadwalkan eksekusi di lingkungan staging dan produksi dengan konfigurasi alur kerja. Sebaiknya picu eksekusi secara manual di lingkungan pengembangan.
Untuk mempelajari lebih lanjut praktik terbaik dalam mengelola siklus proses alur kerja di Dataform, lihat Praktik terbaik untuk siklus proses alur kerja.
Siklus proses kode di beberapa repositori
Untuk menyesuaikan izin Identity and Access Management di setiap tahap siklus proses kode, Anda dapat membuat beberapa salinan repositori dan menyimpannya di project Google Cloud yang berbeda.
Setiap Google Cloud project berfungsi sebagai lingkungan eksekusi yang sesuai dengan tahap siklus proses kode Anda—misalnya, pengembangan dan produksi.
Dalam pendekatan ini, sebaiknya pertahankan codebase repositori yang sama di semua project. Untuk menyesuaikan kompilasi dan eksekusi di setiap salinan repositori, gunakan penggantian kompilasi ruang kerja, konfigurasi rilis, dan konfigurasi alur kerja.
Ringkasan ukuran repositori
Bagian ini membantu Anda memahami pengaruh ukuran repositori terhadap pengembangan alur kerja dan penggunaan resource kompilasi Dataform, serta cara memperkirakan penggunaan resource kompilasi repositori Anda.
Tentang ukuran repositori di Dataform
Ukuran repositori memengaruhi aspek pengembangan berikut di Dataform:
Kolaborasi. Beberapa kolaborator yang mengerjakan repositori besar dapat membuat terlalu banyak permintaan pull, sehingga meningkatkan risiko konflik penggabungan.
Keterbacaan codebase. Jumlah file yang lebih besar yang membentuk alur kerja dalam satu repositori dapat mempersulit penjelajahan repositori.
Proses pengembangan. Beberapa area alur kerja besar dalam satu repositori mungkin memerlukan izin atau proses kustom, seperti penjadwalan, yang berbeda dari izin dan proses yang diterapkan ke alur kerja lainnya. Ukuran repositori yang besar menyulitkan penyesuaian proses pengembangan ke area alur kerja tertentu.
Kompilasi alur kerja. Dataform menerapkan batas penggunaan pada resource kompilasi. Ukuran repositori yang besar dapat menyebabkan batas ini terlampaui, sehingga kompilasi gagal.
Eksekusi alur kerja. Selama eksekusi, Dataform menjalankan kode repositori di dalam ruang kerja Anda dan men-deploy aset ke BigQuery. Makin besar repositori, makin banyak waktu yang dibutuhkan Dataform untuk menjalankannya.
Jika ukuran repositori yang besar berdampak negatif pada pengembangan Anda di Dataform, Anda dapat membagi repositori menjadi beberapa repositori yang lebih kecil.
Tentang batas resource kompilasi repositori
Selama pengembangan, Dataform mengompilasi semua kode repositori di dalam ruang kerja Anda untuk menghasilkan representasi alur kerja di repositori Anda. Hal ini disebut hasil kompilasi. Dataform menerapkan batas penggunaan pada resource kompilasi.
Repositori Anda mungkin melebihi batas penggunaan karena alasan berikut:
- Bug loop tak terbatas dalam kode repositori.
- Bug kebocoran memori dalam kode repositori.
- Ukuran repositori yang besar, kira-kira lebih dari 1.000 tindakan alur kerja.
Untuk mengetahui informasi selengkapnya tentang batas penggunaan pada resource kompilasi, lihat Batas resource kompilasi Dataform.
Memperkirakan penggunaan resource kompilasi repositori Anda
Anda dapat memperkirakan penggunaan resource kompilasi berikut untuk repositori Anda:
- Penggunaan waktu CPU.
- Ukuran total maksimum data berseri dari grafik tindakan yang dihasilkan yang ditentukan di repositori Anda.
Untuk mendapatkan perkiraan kasar penggunaan waktu CPU kompilasi saat ini untuk kompilasi repositori Anda, Anda dapat mengukur waktu kompilasi alur kerja Dataform di komputer Linux atau macOS lokal.
Untuk mengukur waktu kompilasi alur kerja, di dalam repositori, jalankan perintah Dataform CLI
dataform compile
dalam format berikut:time dataform compile
Contoh kode berikut menunjukkan hasil eksekusi perintah
time dataform compile
:real 0m3.480s user 0m1.828s sys 0m0.260s
Anda dapat memperlakukan hasil real
sebagai indikator kasar penggunaan waktu CPU untuk
kompilasi repositori Anda.
Untuk mendapatkan perkiraan kasar ukuran total grafik tindakan yang dihasilkan di repositori Anda, Anda dapat menulis output grafik ke file JSON. Anda dapat memperlakukan ukuran file JSON yang tidak dikompresi sebagai indikator kasar dari total ukuran grafik.
Untuk menulis output grafik alur kerja yang dikompilasi ke file JSON, di dalam repositori Anda, jalankan perintah Dataform CLI berikut:
dataform compile --json > graph.json
Memisahkan repositori
Bagian ini membahas strategi untuk memisahkan repositori Dataform dan mengelola dependensi lintas repositori.
Repositori adalah unit inti di Dataform. Repositori menyimpan semua file SQLX dan JavaScript yang membentuk alur kerja Anda, serta file dan paket konfigurasi Dataform. Anda dapat menyimpan alur kerja dalam satu repositori, atau membagi alur kerja di antara beberapa repositori.
Memisahkan repositori di Dataform memberikan keuntungan berikut:
- Mematuhi batas Dataform terkait penggunaan resource kompilasi. Membagi alur kerja besar menjadi beberapa repositori yang lebih kecil akan mengurangi risiko melampaui batas Dataform pada resource kompilasi.
- Proses yang lebih mendetail. Anda dapat menetapkan proses, seperti aturan integrasi berkelanjutan (CI), satu per satu untuk setiap fragmen pemisahan alur kerja dan tim yang mengembangkannya.
- Izin terperinci. Anda dapat menetapkan izin satu per satu untuk setiap fragmen alur kerja dan tim yang mengembangkannya untuk meningkatkan keamanan alur kerja secara keseluruhan.
- Meningkatkan kolaborasi dengan meminimalkan jumlah kolaborator yang mengerjakan setiap fragmen terpisah dari alur kerja Anda.
- Meningkatkan keterbacaan codebase. Membagi file yang membentuk alur kerja besar menjadi beberapa repositori akan memudahkan navigasi setiap repositori satu per satu daripada menavigasi seluruh alur kerja sekaligus.
- Mempercepat eksekusi alur kerja setiap fragmen terpisah dari alur kerja Anda dibandingkan dengan eksekusi seluruh alur kerja.
Memisahkan repositori di Dataform memiliki kekurangan berikut:
- Konfigurasi continuous integration dan continuous development (CI/CD) kustom diperlukan untuk setiap repositori Dataform dan repositori Git yang sesuai.
- Konfigurasi penjadwalan kustom diperlukan untuk setiap repositori Dataform dan repositori Git yang sesuai.
- Kesulitan dalam mengelola dependensi antara objek alur kerja yang disimpan di beberapa repositori.
- Kurangnya visualisasi directed acyclic graph (DAG) yang komprehensif dari alur kerja SQL yang dibagi di antara beberapa repositori. Di setiap repositori, DAG yang dihasilkan hanya merepresentasikan sebagian alur kerja yang lengkap.
Strategi untuk memisahkan repositori
Saat memisahkan repositori, Anda membagi file yang membentuk alur kerja SQL induk menjadi alur kerja turunan yang lebih kecil dan ditempatkan di repositori Dataform terpisah.
Anda dapat memilih untuk memisahkan repositori dengan salah satu cara berikut:
- Satu repositori per tim pengembangan.
- Satu repositori per domain—misalnya, penjualan, pemasaran, atau logistik.
- Satu repositori pusat dan satu repositori per domain yang menggunakan konten repositori pusat sebagai sumber data.
Untuk menampung alur kerja induk di platform hosting Git pihak ketiga, Anda harus menghubungkan setiap repositori terpisah yang berisi alur kerja turunan ke repositori Git pihak ketiga khusus secara terpisah.
Mengelola dependensi lintas repositori
Cara paling efisien untuk memisahkan repositori adalah dengan membagi alur kerja SQL induk menjadi alur kerja turunan yang mandiri, sehingga membuat repositori independen. Repositori independen tidak menggunakan konten repositori lain sebagai sumber data. Pendekatan ini tidak memerlukan pengelolaan dependensi lintas repositori.
Jika Anda tidak dapat menghindari dependensi lintas repositori, Anda dapat mengelolanya dengan membagi repositori menjadi serangkaian repositori, yang mana repositori bergantung pada pendahulunya dan merupakan sumber data bagi penerusnya. Urutan repositori dan dependensinya harus mencerminkan struktur alur kerja induk Anda dengan sebaik-baiknya.
Anda dapat membuat dependensi antar-repositori dengan deklarasi sumber data Dataform. Anda dapat mendeklarasikan jenis tabel BigQuery dari repositori Dataform yang berbeda sebagai sumber data di repositori yang sedang diedit. Setelah mendeklarasikan sumber data, Anda dapat mereferensikannya seperti tindakan alur kerja Dataform lainnya dan menggunakannya untuk mengembangkan alur kerja Anda.
Saat menjadwalkan eksekusi alur kerja yang dibagi di antara repositori dengan dependensi lintas repositori, Anda harus menjalankan repositori satu per satu dalam urutan dependensi lintas repositori.
Sebaiknya hindari memisahkan repositori menjadi sekelompok repositori dengan dependensi dua arah. Dependensi dua arah antara repositori terjadi saat repositori menjadi sumber data untuk repositori lain dan juga menggunakan repositori tersebut sebagai sumber data. Dependensi dua arah antara repositori mempersulit penjadwalan dan eksekusi alur kerja induk, serta proses pengembangan.
Menyusun kode dalam repositori
Bagian ini menjelaskan praktik terbaik untuk menyusun dan memberi nama file alur kerja di direktori definitions
root repositori Dataform. Struktur
direktori definitions
yang direkomendasikan mencerminkan tahap-tahap
alur kerja. Anda dapat menerapkan struktur apa pun yang sesuai dengan kebutuhan bisnis Anda.
Anda mungkin ingin menyusun kode alur kerja di direktori definitions
karena alasan berikut:
- Meningkatkan kolaborasi pada codebase dengan menunjuk tim untuk bagian alur kerja yang dipilih.
- Meningkatkan kemudahan pemeliharaan alur kerja jika terjadi perubahan organisasi.
- Meningkatkan kualitas navigasi melalui codebase Anda.
- Meningkatkan skalabilitas codebase.
- Meminimalkan overhead administratif untuk tim Anda.
Struktur direktori definitions
yang direkomendasikan
Direktori definitions
root di repositori Dataform
berisi kode yang membuat elemen alur kerja Anda. Anda dapat mengatur
file di direktori definitions
ke dalam struktur direktori
yang mencerminkan struktur alur kerja.
Saat mengembangkan alur kerja, Anda mendeklarasikan tabel sumber dan mentransformasinya untuk membuat tabel output yang dapat Anda gunakan untuk tujuan bisnis atau analisis.
Anda dapat membedakan tiga tahap utama alur kerja:
- Deklarasi sumber data.
- Transformasi data sumber.
- Definisi tabel output dari data sumber yang diubah.
Struktur subdirektori berikut dalam direktori definitions
mencerminkan tahapan utama alur kerja:
sources
- Deklarasi sumber data dan transformasi dasar data sumber—misalnya, pemfilteran.
intermediate
- Tabel dan tindakan yang membaca dari
sources
dan mengubah data sebelum Anda menggunakan data yang diubah untuk menentukan tabeloutputs
. Tabel biasanya tidak diekspos ke proses atau alat tambahan, seperti alat business intelligence (BI), setelah Dataform menjalankannya ke BigQuery. outputs
- Definisi tabel yang digunakan oleh proses atau alat, seperti BI, setelah Dataform menjalankannya di BigQuery.
extra
- File di luar pipeline utama alur kerja Anda—misalnya, file yang berisi data alur kerja yang disiapkan untuk penggunaan tambahan, seperti machine learning. Subdirektori kustom dan opsional.
Praktik terbaik untuk sources
Subdirektori sources
berisi tahap pertama alur kerja Anda:
deklarasi dan transformasi dasar data sumber.
Di subdirektori sources
, simpan deklarasi sumber data dan tabel
yang memfilter, mengategorikan, melakukan casting, atau mengganti nama kolom.
Hindari menyimpan tabel yang menggabungkan data dari beberapa sumber.
Ubah data sources
dalam tabel yang disimpan di subdirektori intermediate
.
Jika Anda mendeklarasikan sumber data dari beberapa kumpulan, misalnya, Google Ads atau Google Analytics, tetapkan subdirektori untuk setiap kumpulan.
Contoh berikut menunjukkan struktur subdirektori sources
dengan dua kumpulan sumber:
definitions/
sources/
google_ads/
google_ads_filtered.sqlx
google_ads_criteria_metrics.sqlx
google_ads_criteria_metrics_filtered.sqlx
google_ads_labels.sqlx
google_ads_labels_filtered.sqlx
google_analytics/
google_analytics_users.sqlx
google_analytics_users_filtered.sqlx
google_analytics_sessions.sqlx
Jika Anda mendeklarasikan beberapa tabel sumber data dalam skema yang sama, Anda dapat menggabungkan deklarasinya ke dalam satu file JavaScript.
Untuk mengetahui informasi selengkapnya tentang cara membuat deklarasi sumber data dengan JavaScript, lihat Membuat alur kerja secara eksklusif dengan JavaScript.
Contoh kode berikut menunjukkan beberapa sumber data dalam satu skema, yang dideklarasikan dalam satu file JavaScript:
[
"source_table_1",
"source_table_2",
"source_table_3"
].forEach((name) =>
declare({
database: "gcp_project",
schema: "source_dataset",
name,
})
);
Untuk melindungi alur kerja Anda dari perubahan sumber data, Anda dapat membuat tampilan
untuk setiap deklarasi sumber data—misalnya, analytics_users_filtered.sqlx
.
Tampilan dapat berisi pemfilteran dan pemformatan dasar data sumber.
Simpan tampilan di subdirektori sources
.
Kemudian, saat Anda membuat tabel intermediate
atau outputs
, lihat tampilan
alih-alih tabel sumber mentah. Pendekatan ini memungkinkan Anda menguji tabel sumber.
Jika tabel sumber berubah, Anda dapat mengubah tampilannya—misalnya,
dengan menambahkan filter atau mengubah jenis data.
Praktik terbaik untuk intermediate
Subdirektori intermediate
berisi tahap kedua alur kerja Anda:
transformasi dan agregasi data sumber dari satu atau beberapa
sumber.
Di subdirektori intermediate
, simpan file yang secara signifikan mengubah
data sumber dari satu atau beberapa sumber di subdirektori sources
—misalnya, tabel yang menggabungkan data. Tabel di subdirektori intermediate
biasanya membuat kueri data dari tabel sumber atau tabel intermediate
lainnya.
Gunakan tabel intermediate
untuk membuat tabel outputs
. Biasanya, intermediate
tabel tidak digunakan untuk tujuan tambahan—misalnya, analisis data—setelah
Dataform menjalankannya ke BigQuery. Anda dapat menganggap tabel
intermediate
sebagai logika transformasi data yang memungkinkan pembuatan
tabel output.
Sebaiknya Anda
mendokumentasikan dan
menguji semua tabel intermediate
.
Praktik terbaik untuk outputs
Subdirektori outputs
berisi tahap akhir alur kerja Anda:
pembuatan tabel output untuk tujuan bisnis Anda dari data yang telah diubah.
Di direktori outputs
, simpan tabel yang akan Anda gunakan dalam proses atau alat tambahan setelah Dataform menjalankannya ke BigQuery—misalnya, laporan atau dasbor. Tabel di direktori
outputs
biasanya mengkueri data dari tabel intermediate
.
Kelompokkan tabel outputs
berdasarkan entitas bisnis yang terkait dengannya, misalnya—pemasaran, pesanan, atau analisis. Tentukan subdirektori untuk setiap entitas bisnis.
Untuk menyimpan tabel output secara terpisah di BigQuery, Anda dapat mengonfigurasi skema khusus untuk tabel output. Untuk mengetahui petunjuk cara mengonfigurasi skema tabel, lihat Mengganti setelan tabel.
Contoh berikut menunjukkan struktur subdirektori outputs
dengan entitas bisnis sales
dan marketing
:
definitions/
outputs/
orders/
orders.sqlx
returns.sqlx
sales/
sales.sqlx
revenue.sqlx
marketing/
campaigns.sqlx
Sebaiknya Anda
mendokumentasikan dan
menguji semua tabel outputs
.
Strategi penamaan
Nama semua file di Dataform harus sesuai dengan pedoman penamaan tabel BigQuery.
Sebaiknya nama file di direktori definitions
dalam repositori Dataform mencerminkan struktur subdirektori.
Di subdirektori sources
, nama file harus mengarah ke sumber
yang terkait dengan file tersebut. Tambahkan nama sumber sebagai awalan ke nama file—misalnya, analytics_filtered.sqlx
Di subdirektori intermediate
, nama file harus mengidentifikasi subdirektori, sehingga kolaborator dapat membedakan file intermediate
dengan jelas.
Pilih awalan unik dan terapkan hanya ke file di direktori intermediate
, misalnya, stg_ads_concept.sqlx
.
Di subdirektori outputs
, nama file harus ringkas—misalnya,
orders.sqlx
. Jika Anda memiliki tabel outputs
dengan nama yang sama di
subdirektori entitas yang berbeda, tambahkan awalan yang mengidentifikasi entitas
—misalnya, sales_revenue.sqlx
atau ads_revenue.sqlx
.
Contoh berikut menunjukkan struktur subdirektori di dalam direktori definitions
dengan nama file yang sesuai dengan strategi penamaan yang direkomendasikan:
definitions/
sources/
google_analytics.sqlx
google_analytics_filtered.sqlx
intermediate/
stg_analytics_concept.sqlx
outputs/
customers.sqlx
sales/
sales.sqlx
sales_revenue.sqlx
ads/
campaigns.sqlx
ads_revenue.sqlx
Langkah berikutnya
- Untuk mempelajari lebih lanjut siklus proses kode di Dataform dan berbagai cara untuk mengonfigurasinya, lihat Pengantar siklus proses kode di Dataform.
- Untuk mempelajari lebih lanjut praktik terbaik untuk siklus proses alur kerja, lihat Praktik terbaik untuk siklus proses alur kerja.
- Untuk mempelajari batas resource kompilasi Dataform lebih lanjut, lihat Batas resource kompilasi Dataform.
- Untuk mempelajari cara menghubungkan repositori Dataform ke repositori Git pihak ketiga, lihat Menghubungkan ke repositori Git pihak ketiga.
- Untuk mempelajari alur kerja di Dataform lebih lanjut, lihat Ringkasan alur kerja.