Inti Dataform memungkinkan Anda membuat tindakan alur kerja dengan SQLX dan JavaScript. Meskipun opsional, Anda dapat menggunakan JavaScript bersama dengan SQLX untuk membuat elemen serupa berulang kali dalam alur kerja Anda. Misalnya, dengan JavaScript, Anda dapat membuat tampilan setiap tabel dalam alur kerja dengan ID pengguna tertentu dihapus. Anda juga dapat mengembangkan tindakan alur kerja secara eksklusif dengan JavaScript.
Sebelum memulai
Di konsol Google Cloud , buka halaman Dataform.
Pilih atau buat repositori.
Pilih atau buat ruang kerja pengembangan.
Selain itu, Anda harus memahami sintaksis JavaScript dan konsep JavaScript berikut:
- Variabel
- Array
- Pernyataan bersyarat
- Loop for
- Maps
- Fungsi
- Objek
- Mengekspor dan mengimpor modul
Peran yang diperlukan
Untuk mendapatkan izin yang
diperlukan guna mengembangkan alur kerja dengan JavaScript dan menggunakan kembali kode dengan include JavaScript,
minta administrator untuk memberi Anda peran IAM
Dataform Editor (roles/dataform.editor) di ruang kerja.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menambahkan kode JavaScript ke file SQLX
Anda dapat menambahkan kode JavaScript ke file SQLX dengan dua cara: inline atau di dalam blok JavaScript.
Anda dapat menggunakan blok JavaScript untuk menentukan fungsi atau konstanta dalam file SQLX. Anda dapat menggunakan JavaScript inline untuk mengubah kueri SQLX atau SQL secara dinamis.
Contoh kode berikut menunjukkan fungsi JavaScript bawaan inti Dataform self yang ditambahkan secara inline ke blok post_operations dalam file SQLX:
config {type: "table"}
SELECT * FROM ...
post_operations {
GRANT `roles/bigquery.dataViewer`
ON
TABLE ${self()}
TO "group:allusers@example.com", "user:otheruser@example.com"
}
Contoh kode berikut menunjukkan konstanta yang ditentukan dalam blok JavaScript dan digunakan inline di dalam kueri dalam file SQLX:
js {
const columnName = "foo";
}
SELECT 1 AS ${columnName} FROM "..."
Menggunakan kembali kode di satu file SQLX dengan enkapsulasi JavaScript
Anda dapat menggunakan kembali kode JavaScript untuk menyederhanakan pengembangan di Dataform. Untuk menggunakan kembali konstanta dan fungsi JavaScript di satu file SQLX, Anda dapat mengenkapsulasinya dalam blok JavaScript. Untuk menggunakan kembali kode JavaScript di satu repositori Dataform, Anda dapat membuat include. Untuk menggunakan kembali kode JavaScript di beberapa repositori Dataform, Anda dapat membuat atau mengimpor paket.
Untuk membuat bagian kode SQL berulang yang dapat Anda gunakan kembali dalam satu file SQLX, Anda dapat mengenkapsulasi fungsi dan konstanta dalam blok JavaScript. Anda dapat menggunakan kembali kode yang ditentukan dalam blok JavaScript hanya di dalam file SQLX tempat blok ditentukan. Untuk mengetahui informasi selengkapnya, lihat Inti Dataform.
Contoh kode berikut menunjukkan konstanta dan fungsi yang ditentukan dalam blok JavaScript dan digunakan inline di dalam kueri dalam file SQLX:
js {
const foo = 1;
function bar(number){
return number+1;
}
}
select
${foo} as one,
${bar(foo)} as two
Menggunakan kembali kode di satu repositori dengan include
Include adalah konstanta atau fungsi JavaScript yang bersifat global untuk repositori Anda.
Anda menentukan include di direktori includes repositori Anda. Kemudian, Anda dapat
menggunakannya kembali di seluruh repositori dalam file JavaScript dan SQLX.
Contoh kode berikut menunjukkan definisi konstanta launch_date
dalam file includes/constants.js:
// filename is includes/constants.js
const launch_date = "11.11.2011";
module.exports = { launch_date };
Contoh kode berikut menunjukkan konstanta launch_date yang dirujuk dalam kueri definisi tabel di file SQLX:
config {type: "table"}
SELECT * FROM source_table WHERE date > ${constants.launch_date}
Membuat file JavaScript untuk include
Untuk membuat file JavaScript baru di direktori includes/, ikuti langkah-langkah berikut:
Di panel Files, di samping
includes/, klik Lainnya.Klik Create file.
Di panel Create new file, lakukan hal berikut:
Di kolom Tambahkan jalur file, setelah
includes/, masukkan nama file yang diikuti dengan.js. Contoh,includes/constants.js.Nama file hanya boleh berisi angka, huruf, tanda hubung, dan garis bawah.
Klik Create file.
Membuat konstanta JavaScript
Untuk membuat konstanta yang dapat Anda gunakan kembali di seluruh project, ikuti langkah-langkah berikut:
Buka ruang kerja pengembangan Anda.
Di panel Files, luaskan
includes/.Buat atau pilih file JavaScript dengan ekstensi
.js.Di file tersebut, masukkan cuplikan kode berikut:
const CONSTANT_NAME = CONSTANT_VALUE; module.exports = { CONSTANT_NAME };Ganti kode berikut:
- CONSTANT_NAME: nama konstanta Anda
- CONSTANT_VALUE: nilai konstanta Anda
Opsional: Klik Format.
Contoh kode berikut menentukan konstanta PROJECT_ID dalam file
includes/constants.js:
// filename is includes/constants.js
const PROJECT_ID = "my_project_name";
module.exports = { PROJECT_ID };
Contoh kode berikut mereferensikan konstanta PROJECT_ID dalam kueri definisi tabel di file SQLX:
config { type: "table" }
SELECT * FROM ${constants.PROJECT_ID}.my_schema_name.my_table_name
Contoh kode berikut menunjukkan kueri definisi tabel inti Dataform sebelumnya yang dikompilasi menjadi SQL:
SELECT * FROM my_project_name.my_schema_name.my_table_name
Membuat fungsi JavaScript kustom
Untuk membuat fungsi JavaScript kustom yang dapat Anda gunakan kembali di seluruh project, ikuti langkah-langkah berikut:
Buka ruang kerja pengembangan Anda.
Di panel Files, luaskan
includes/.Buat atau pilih file JavaScript dengan ekstensi
.js.Dalam file, tulis fungsi JavaScript kustom Anda.
Di file tersebut, masukkan cuplikan kode berikut:
module.exports = { FUNCTION_NAME }Ganti
FUNCTION_NAMEdengan nama fungsi Anda.Opsional: Klik Format.
Contoh kode berikut menunjukkan fungsi JavaScript kustom yang disebut
renderScript dan disimpan dalam file includes/functions.js. Fungsi
membuat skrip SQL:
function renderScript(table, dimensions, metrics) {
return `
select
${dimensions.map(field => `${field} as ${field}`).join(",")},
${metrics.map(field => `sum(${field}) as ${field}`).join(",\n")}
from ${table}
group by ${dimensions.map((field, i) => `${i + 1}`).join(", ")