Panduan terjemahan SQL Snowflake
Dokumen ini menjelaskan persamaan dan perbedaan sintaksis SQL antara Snowflake dan BigQuery untuk membantu mempercepat perencanaan dan eksekusi pemindahan EDW (Enterprise Data Warehouse) Anda ke BigQuery. Data warehousing Snowflake dirancang untuk digunakan dengan sintaksis SQL khusus Snowflake. Skrip yang ditulis untuk Snowflake mungkin perlu diubah sebelum Anda dapat menggunakannya di BigQuery, karena dialek SQL bervariasi antarlayanan. Gunakan terjemahan SQL batch untuk memigrasikan skrip SQL secara massal, atau terjemahan SQL interaktif untuk menerjemahkan kueri ad hoc. Snowflake SQL didukung oleh kedua alat di pratinjau.
Jenis data
Bagian ini menampilkan padanan antara jenis data di Snowflake dan BigQuery.
Snowflake | BigQuery | Notes |
---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC |
Jenis data NUMBER di Snowflake mendukung presisi 38 digit dan skala 37 digit. Presisi dan skala dapat ditentukan sesuai dengan pengguna.BigQuery mendukung NUMERIC dan BIGNUMERIC dengan presisi dan skala yang ditentukan secara opsional dalam batas tertentu. |
INT/INTEGER |
BIGNUMERIC |
INT/INTEGER dan semua jenis data lainnya yang mirip dengan INT , seperti BIGINT, TINYINT, SMALLINT, BYTEINT mewakili alias untuk jenis data NUMBER dengan presisi dan skala tidak dapat ditentukan dan selalu NUMBER(38, 0) |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
Jenis data FLOAT di Snowflake menetapkan 'NaN' sebagai > X, dengan X adalah nilai FLOAT (selain 'NaN' itu sendiri).Jenis data FLOAT di BigQuery menetapkan 'NaN' sebagai < X, dengan X adalah nilai FLOAT (selain 'NaN' itu sendiri). |
DOUBLE/ REAL |
FLOAT64 |
Jenis data DOUBLE di Snowflake mirip dengan jenis data FLOAT di Snowflake, tetapi biasanya salah ditampilkan sebagai FLOAT . File disimpan dengan benar sebagai DOUBLE . |
VARCHAR |
STRING |
Jenis data VARCHAR di Snowflake memiliki panjang maksimum 16 MB (tidak dikompresi). Jika panjang tidak ditentukan, panjang defaultnya adalah panjang maksimum.Jenis data STRING di BigQuery disimpan sebagai Unicode berenkode UTF-8 dengan panjang variabel. Panjang maksimum adalah 16.000 karakter. |
CHAR/CHARACTER |
STRING |
Jenis data CHAR di Snowflake memiliki panjang maksimum 1. |
STRING/TEXT |
STRING |
Jenis data STRING di Snowflake identik dengan VARCHAR Snowflake. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
Jenis data BOOL di BigQuery hanya dapat menerima TRUE/FALSE , tidak seperti jenis data BOOL di Snowflake, yang dapat menerima TRUE/FALSE/NULL. |
DATE |
DATE |
Jenis DATE di Snowflake menerima format tanggal yang paling umum, tidak seperti jenis DATE di BigQuery, yang hanya menerima tanggal dalam format, 'YYYY-[M]M-[D]D'. |
TIME |
TIME |
Jenis TIME di Snowflake mendukung presisi 0 hingga 9 nanodetik, sedangkan jenis TIME di BigQuery mendukung presisi 0 hingga 6 nanodetik. |
TIMESTAMP |
DATETIME |
TIMESTAMP adalah alias yang dapat dikonfigurasi pengguna dan ditetapkan secara default ke TIMESTAMP_NTZ yang memetakan ke DATETIME di BigQuery. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
Jenis OBJECT di Snowflake tidak mendukung nilai yang diketik secara eksplisit. Nilai adalah jenis VARIANT . |
VARIANT |
JSON |
Jenis OBJECT di Snowflake tidak mendukung nilai yang diketik secara eksplisit. Nilai adalah jenis VARIANT . |
ARRAY |
ARRAY<JSON> |
Jenis ARRAY di Snowflake hanya dapat mendukung jenis VARIANT , sedangkan jenis ARRAY di BigQuery dapat mendukung semua jenis data kecuali array itu sendiri. |
BigQuery juga memiliki jenis data berikut yang tidak memiliki analog Snowflake langsung:
Sintaksis kueri dan operator kueri
Bagian ini membahas perbedaan sintaksis kueri antara Snowflake dan BigQuery.
Pernyataan SELECT
Sebagian besar pernyataan SELECT
Snowflake kompatibel dengan BigQuery. Tabel berikut berisi daftar perbedaan kecil.
Snowflake | BigQuery | |
---|---|---|
|
|
|
Catatan: Snowflake mendukung pembuatan dan perujukan alias dalam pernyataan SELECT yang sama. |
|
|
|
|
Secara default, alias dan ID Snowflake tidak peka huruf besar/kecil. Untuk mempertahankan penggunaan huruf besar/kecil, sertakan alias dan ID dengan tanda kutip ganda (").
Klausa FROM
Klausa FROM
dalam kueri menentukan kemungkinan tabel, tampilan, subkueri, atau fungsi tabel yang dapat digunakan dalam pernyataan SELECT. Semua referensi tabel ini didukung di BigQuery.
Tabel berikut berisi daftar perbedaan kecil.
Snowflake | BigQuery | |
---|---|---|
|
WITH table1 AS |
|
|
|
|
|
Catatan: BigQuery tidak memiliki alternatif langsung untuk Snowflake SEBELUM menggunakan ID pernyataan. Nilai timestamp tidak boleh lebih dari 7 hari sebelum stempel waktu saat ini. |
|
|
BigQuery tidak mendukung konsep file bertahap. |
|
|
BigQuery tidak menawarkan alternatif langsung untuk |
Tabel BigQuery dapat dirujuk dalam klausa FROM
menggunakan:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery juga mendukung referensi tabel tambahan:
- Versi historis definisi dan baris tabel menggunakan
FOR SYSTEM_TIME AS OF
- Jalur kolom, atau jalur apa pun yang di-resolve ke kolom dalam suatu jenis data (yaitu,
STRUCT
) - Array yang diratakan
Klausa WHERE
Klausa
WHERE
Snowflake dan klausa
WHERE
BigQuery identik, kecuali untuk hal berikut:
Snowflake | BigQuery | |
---|---|---|
|
SELECT col1, col2 Catatan: BigQuery tidak mendukung sintaksis (+) untuk JOIN |
Jenis JOIN
Snowflake dan BigQuery mendukung jenis join berikut:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
dan "comma cross join" implisit yang setara
Snowflake dan BigQuery mendukung klausa ON
dan USING
.
Tabel berikut berisi daftar perbedaan kecil.
Snowflake | BigQuery | |
---|---|---|
|
Catatan: Di BigQuery, klausa JOIN memerlukan kondisi JOIN kecuali jika merupakan CROSS JOIN atau salah satu tabel yang digabungkan adalah kolom dalam jenis data atau array. |
|
Catatan: Tidak seperti output gabungan non-lateral, output dari gabungan lateral hanya menyertakan baris yang dihasilkan dari tampilan inline. Baris di sisi kiri tidak perlu digabungkan ke sisi kanan karena baris di sisi kiri telah diperhitungkan dengan diteruskan ke tampilan inline. |
LATERAL JOIN . |
Klausa WITH
Klausa WITH
BigQuery
berisi satu atau beberapa subkueri bernama yang dijalankan setiap kali pernyataan
SELECT
berikutnya mereferensikannya. Klausa Snowflake WITH
berperilaku sama seperti BigQuery, hanya saja BigQuery tidak mendukung WITH RECURSIVE
.
Klausa GROUP BY
Klausa GROUP BY
Snowflake mendukung GROUP
BY
,
GROUP BY
ROLLUP
,
GROUP BY GROUPING
SETS
,
dan GROUP BY
CUBE
,
sedangkan klausa GROUP BY
BigQuery mendukung GROUP
BY
,
GROUP BY
ALL
, GROUP
BY ROLLUP
,
GROUP BY GROUPING
SETS
,
dan GROUP BY
CUBE
.
HAVING
Snowflake dan
HAVING
BigQuery serupa. Perhatikan bahwa HAVING
terjadi setelah GROUP BY
dan agregasi, serta
sebelum ORDER BY
.
Snowflake | BigQuery | |
---|---|---|
|
|
|
|
|
|
Catatan: Snowflake memungkinkan hingga 128 kumpulan pengelompokan dalam blok kueri yang sama |
|
|
Catatan: Snowflake memungkinkan hingga 7 elemen (128 kumpulan pengelompokan) di setiap kubus |
|
Klausa ORDER BY
Ada beberapa perbedaan kecil antara klausa ORDER BY
Snowflake dan klausa ORDER BY
BigQuery.
Snowflake | BigQuery | |
---|---|---|
Di Snowflake, NULL diberi peringkat terakhir secara default (urutan menaik). |
Di BigQuery, NULLS diberi peringkat pertama secara default (urutan menaik). |
|
Anda dapat menentukan apakah nilai NULL harus diurutkan terlebih dahulu atau terakhir menggunakan NULLS FIRST atau NULLS LAST . |
Tidak ada kesamaan untuk menentukan apakah nilai NULL harus menjadi nilai pertama atau terakhir di BigQuery. |
Klausa LIMIT/FETCH
Klausa
LIMIT/FETCH
di Snowflake membatasi jumlah maksimum baris yang ditampilkan oleh
pernyataan atau subkueri.
LIMIT
(sintaksis Postgres) dan FETCH
(sintaksis ANSI) memberikan hasil yang sama.
Pada Snowflake dan BigQuery, penerapan klausa LIMIT
ke kueri tidak memengaruhi jumlah data yang dibaca.
Snowflake | BigQuery | |
---|---|---|
Catatan: Nilai NULL , string kosong (''), dan $$$$ diterima dan diperlakukan sebagai "tidak terbatas". Penggunaan utama adalah untuk penghubung dan driver. |
Catatan: BigQuery tidak mendukung FETCH . LIMIT menggantikan FETCH .Catatan: Di BigQuery, OFFSET harus digunakan bersama dengan LIMIT count . Pastikan untuk menetapkan nilai count INT64 ke baris urutan minimum yang diperlukan untuk mendapatkan performa terbaik. Mengurutkan semua baris hasil yang tidak perlu akan menyebabkan performa eksekusi kueri yang lebih buruk. |
Klausa QUALIFY
Klausa
QUALIFY
di Snowflake memungkinkan Anda memfilter hasil untuk fungsi jendela yang mirip dengan
yang dilakukan HAVING
pada fungsi agregat dan klausa GROUP BY
.
Snowflake | BigQuery | |
---|---|---|
|
Klausa QUALIFY Snowflake dengan fungsi analisis seperti ROW_NUMBER() , COUNT() , dan dengan OVER PARTITION BY dinyatakan dalam BigQuery sebagai klausa WHERE di subkueri yang berisi nilai analitik.Menggunakan ROW_NUMBER() :SELECT col1, col2
Menggunakan ARRAY_AGG() , yang mendukung partisi lebih besar:
|
Functions
Bagian berikut mencantumkan fungsi Snowflake dan BigQuery yang setara.
Fungsi agregat
Tabel berikut menunjukkan pemetaan antara agregat Snowflake umum, analisis agregat, dan perkiraan fungsi agregat dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
Catatan: DISTINCT tidak memiliki pengaruh apa pun |
|
Catatan: DISTINCT tidak memiliki pengaruh apa pun |
Catatan: BigQuery tidak mendukung APPROX_COUNT_DISTINCT dengan Window Functions |
Catatan: Snowflake tidak memiliki opsi untuk RESPECT NULLS |
Catatan: BigQuery tidak mendukung APPROX_QUANTILES dengan Window Functions |
|
BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan. |
|
BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan. |
|
BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan. |
Catatan: Jika tidak ada parameter angka yang ditentukan, defaultnya adalah 1. Penghitung harus lebih besar secara signifikan dari angka. |
Catatan: BigQuery tidak mendukung APPROX_TOP_COUNT dengan Window Functions. |
|
BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan. |
|
BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan. |
|
BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan. |
|
Anda dapat menggunakan UDF kustom untuk mengimplementasikan MINHASH dengan k fungsi hash yang berbeda. Pendekatan lain untuk mengurangi varians dalam MINHASH adalah mempertahankank dari nilai minimum satu fungsi hash. Dalam hal ini, indeks Jaccard dapat diperkirakan sebagai berikut:
|
|
Ini adalah sinonim dari APPROXIMATE_JACCARD_INDEX dan dapat diterapkan dengan cara yang sama. |
|
|
|
Catatan: AVG BigQuery tidak melakukan transmisi otomatis pada STRING . |
|
INTEGER terdekat. |
|
Catatan: BigQuery tidak secara implisit mentransmisikan kolom karakter/teks ke INTEGER terdekat. |
|
Catatan: BigQuery tidak secara implisit mentransmisikan kolom karakter/teks ke INTEGER terdekat. |
Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
|
Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
|
Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
Untuk ekspresi numerik:
Untuk menggunakan OVER , Anda dapat menjalankan kode berikut (contoh boolean diberikan):
|
|
|
|
|
|
|
|
|
|
BigQuery tidak mendukung alternatif langsung untuk GROUPING Snowflake. Tersedia melalui Fungsi yang Ditetapkan Pengguna. |
|
BigQuery tidak mendukung alternatif langsung untuk GROUPING_ID Snowflake. Tersedia melalui Fungsi yang Ditetapkan Pengguna. |
|
SELECT BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER] FROM t |
Catatan: Snowflake tidak memungkinkan Anda menentukan presisi. |
Catatan: BigQuery tidak mendukung HLL_COUNT… dengan Fungsi Jendela. Pengguna tidak dapat menyertakan beberapa ekspresi dalam satu fungsi HLL_COUNT... . |
Catatan: Snowflake tidak memungkinkan Anda menentukan presisi. |
HLL_COUNT.INIT (expression [, precision]) |
|
HLL_COUNT.MERGE_PARTIAL (sketch) |
|
|
|
BigQuery tidak mendukung alternatif langsung untuk HLL_EXPORT Snowflake. |
|
BigQuery tidak mendukung alternatif langsung untuk HLL_IMPORT Snowflake. |
|
BigQuery tidak mendukung alternatif langsung untuk KURTOSIS Snowflake. |
|
|
Catatan: Snowflake tidak mendukung kemampuan untuk melakukan IGNORE|RESPECT NULLS dan LIMIT secara langsung di ARRAY_AGG. |
|
|
|
|
Anda dapat menggunakan UDF kustom untuk mengimplementasikan MINHASH dengan fungsi hash yang berbeda k . Pendekatan lain untuk mengurangi varians dalam MINHASH adalah dengan mempertahankan k dari nilai minimum satu fungsi hash: SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS MINHASH
|
|
<code<select FROM ( SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TA AS t ORDER BY h LIMIT k UNION SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TB AS t ORDER BY h LIMIT k ) ORDER BY h LIMIT k |
|
|
|
Anda dapat mempertimbangkan untuk menggunakan TO_JSON_STRING untuk mengonversi nilai ke dalam string berformat JSON |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery tidak mendukung alternatif langsung untuk SKEW Snowflake. |
|
|
|
|
|
|
|
|
Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point. |
|
Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point. |
|
Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point. |
|
Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point. |
|
BigQuery juga menawarkan fungsi agregat, analisis agregat, dan agregat perkiraan berikut, yang tidak memiliki analog langsung di Snowflake:
Fungsi ekspresi bitwise
Tabel berikut menunjukkan pemetaan antara fungsi ekspresi bitwise Snowflake yang umum dengan BigQuery yang setara.
Jika jenis data ekspresi bukan INTEGER
, Snowflake akan mencoba melakukan transmisi
ke INTEGER
. Namun, BigQuery tidak mencoba melakukan transmisi ke INTEGER
.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
Catatan: Snowflake tidak mendukung DISTINCT. |
|
Fungsi ekspresi bersyarat
Tabel berikut menunjukkan pemetaan antara ekspresi kondisional Snowflake umum dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
|
|
Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
|
Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
|
BOOLOR Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
|
BOOLXOR Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol. |
BigQuery tidak mendukung alternatif langsung untuk BOOLXOR. Snowflake |
|
|
Catatan: Snowflake memerlukan setidaknya dua ekspresi. BigQuery hanya memerlukan satu. |
|
|
DECODE Snowflake. Pengguna harus menggunakan IS NULL bukan = NULL untuk mencocokkan NULL ekspresi pilih dengan ekspresi penelusuran NULL . |
|
BigQuery tidak mendukung alternatif langsung untuk EQUAL_NULL. Snowflake |
|
|
|
|
|
|
|
|
|
BigQuery tidak mendukung alternatif langsung untuk IS [ NOT ] DISTINCT FROM. Snowflake |
|
|
|
BigQuery tidak mendukung jenis data VARIANT . |
|
|
|
|
|
|
|
|
|
REGR... Snowflake. |
|
Catatan: BigQuery tidak mendukung alternatif langsung untuk fungsi REGR... Snowflake. |
|
|
Fungsi konteks
Tabel berikut menunjukkan pemetaan antara fungsi konteks Snowflake umum dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
Catatan: Bukan perbandingan langsung. Snowflake menampilkan ID akun, BigQuery menampilkan alamat email pengguna. |
|
Konsep tidak digunakan di BigQuery |
|
Tindakan ini akan menampilkan tabel nama project. Bukan perbandingan langsung. |
|
Catatan: Snowflake tidak menerapkan '()' setelah perintah CURRENT_DATE untuk mematuhi standar ANSI. |
Catatan: CURRENT_DATE BigQuery mendukung spesifikasi zona waktu opsional. |
Catatan: INFORMATION_SCHEMA.SCHEMATA BigQuery menampilkan referensi lokasi yang lebih umum daripada CURRENT_REGION() Snowflake. Bukan perbandingan langsung. |
|
Konsep tidak digunakan di BigQuery |
|
Tindakan ini akan menampilkan tabel semua set data (juga disebut skema) yang tersedia di project atau region. Bukan perbandingan langsung. |
|
Konsep tidak digunakan di BigQuery |
|
Konsep tidak digunakan di BigQuery |
|
Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran kueri berdasarkan jenis tugas, jenis awal/akhir, dll. |
|
Catatan: Snowflake memungkinkan presisi detik pecahan yang opsional. Nilai yang valid berkisar dari 0-9 nanodetik. Nilai defaultnya adalah 9. Agar sesuai dengan ANSI, ini dapat dipanggil tanpa '()'. |
|
Catatan: Snowflake memungkinkan presisi detik pecahan yang opsional. Nilai yang valid berkisar dari 0-9 nanodetik. Nilai defaultnya adalah 9. Agar sesuai dengan ANSI, ini dapat dipanggil tanpa '()'. Tetapkan TIMEZONE sebagai parameter sesi. |
Catatan:
CURRENT_DATETIME menampilkan jenis data DATETIME (tidak didukung di Snowflake). CURRENT_TIMESTAMP menampilkan jenis data TIMESTAMP . |
INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran ID tugas berdasarkan jenis tugas, jenis awal/akhir, dll. |
|
Catatan: Snowflake tidak menerapkan '()' setelah perintah CURRENT_USER untuk mematuhi standar ANSI. |
|
Konsep tidak digunakan di BigQuery |
|
|
|
|
Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran ID tugas berdasarkan jenis tugas, jenis awal/akhir, dll. |
Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran ID tugas berdasarkan jenis tugas, jenis awal/akhir, dll. |
|
Catatan: Snowflake tidak menerapkan '()' setelah perintah LOCALTIME untuk mematuhi standar ANSI. |
|
Catatan:
CURRENT_DATETIME menampilkan jenis data DATETIME (tidak didukung di Snowflake). CURRENT_TIMESTAMP menampilkan jenis data TIMESTAMP . |
Fungsi konversi
Tabel berikut menunjukkan pemetaan antara fungsi konversi Snowflake umum dengan BigQuery yang setara.
Perlu diingat bahwa fungsi yang tampak identik di Snowflake dan BigQuery dapat menampilkan jenis data yang berbeda.
Snowflake | BigQuery |
---|---|
|
|
|
|
Catatan: Snowflake mendukung konversi HEX , BASE64 , dan UTF-8 . Snowflake juga mendukung TO_BINARY menggunakan jenis data VARIANT . BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: Transmisi STRING default BigQuery menggunakan encoding UTF-8 . Snowflake tidak memiliki opsi untuk mendukung encoding BASE32 . |
Catatan:
|
Catatan:
|
Catatan: Model format Snowflake dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME , atau FORMAT_TIMESTAMP . |
Catatan: Snowflake mendukung kemampuan untuk langsung mengonversi jenis INTEGER ke jenis DATE . Model format Snowflake dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT , FORMAT_DATETIME , atau FORMAT_TIMESTAMP . |
Catatan: Model format Snowflake untuk jenis data DECIMAL , NUMBER , dan NUMERIC dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT. |
Catatan: Model format Snowflake untuk jenis data DOUBLE dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT. |
|
BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake. |
|
BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake. |
Catatan: Model format Snowflake untuk jenis data STRING dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake. Ekspresi input BigQuery dapat diformat menggunakan FORMAT , FORMAT_DATETIME , FORMAT_TIMESTAMP , atau FORMAT_TIME . |
Catatan: BigQuery tidak memiliki alternatif untuk jenis data VARIANT . |
Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT , FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME . Zona waktu dapat disertakan/tidak disertakan melalui parameter FORMAT_TIMESTAMP . |
|
BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake. |
|
BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery juga menawarkan fungsi konversi berikut, yang tidak memiliki analog langsung di Snowflake:
CODE_POINTS_TO_BYTES
CODE_POINTS_TO_STRING
FORMAT
FROM_BASE32
FROM_BASE64
FROM_HEX
SAFE_CONVERT_BYTES_TO_STRING
TO_BASE32
TO_CODE_POINTS
Fungsi pembuatan data
Tabel berikut menunjukkan pemetaan antara fungsi pembuatan data Snowflake yang umum dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
|
BigQuery tidak mendukung perbandingan langsung dengan NORMAL. Snowflake |
|
Catatan: BigQuery tidak mendukung seeding |
|
BigQuery tidak mendukung perbandingan langsung dengan RANDSTR. Snowflake |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
BigQuery tidak mendukung perbandingan langsung dengan SEQ_. Snowflake |
|
Catatan:Gunakan persistent UDF untuk membuat yang setara dengan UNIFORM Snowflake. Contohnya di sini. |
UUID_STRING([uuid, name]) Catatan: Snowflake menampilkan 128 bit acak. Snowflake mendukung UUID versi 4 (acak) dan versi 5 (dinamai). |
Catatan: BigQuery menampilkan 122 bit acak. BigQuery hanya mendukung UUID versi 4. |
|
BigQuery tidak mendukung perbandingan langsung dengan ZIPF. Snowflake |
Fungsi tanggal dan waktu
Tabel berikut menampilkan pemetaan antara fungsi tanggal dan waktu Snowflake yang umum dengan BigQuery yang setara. Data BigQuery dan fungsi waktu mencakup Fungsi tanggal .Fungsi tanggal dan waktu .Fungsi waktu , dan Fungsi stempel waktu singkat ini.
Snowflake | BigQuery |
---|---|
|
|
|
Catatan: source_timezone di BigQuery selalu dalam UTC |
Catatan: Snowflake mendukung tanggal tambahan dan negatif. Misalnya, DATE_FROM_PARTS(2000, 1 + 24, 1) menampilkan 1 Januari 2002. Hal ini tidak didukung di BigQuery. |
|
Catatan: Snowflake mendukung jenis bagian ISO, nanodetik, dan epoch hari dalam seminggu. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini
. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>), mikrodetik, dan milidetik. Snowflake tidak demikian. Lihat daftar lengkap jenis suku cadang BigQuery di sini dan di sini. |
Catatan: Snowflake mendukung jenis bagian nanodetik. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini
. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>), minggu ISO, dan tahun ISO. Snowflake tidak demikian. |
|
|
Catatan: Snowflake mendukung penghitungan perbedaan antara dua jenis tanggal, waktu, dan stempel waktu dalam fungsi ini. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>) dan tahun ISO. |
|
|
Catatan: Snowflake mendukung jenis bagian ISO, nanodetik, dan epoch hari dalam seminggu. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini
. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>), mikrodetik, dan milidetik. Snowflake tidak demikian. Lihat daftar lengkap jenis suku cadang BigQuery di sini dan di sini. |
|
|
|
|
|
|
|
Catatan: dowString mungkin perlu diformat ulang. Misalnya, 'su' Snowflake akan menjadi 'SUNDAY' BigQuery. |
|
Catatan: dowString mungkin perlu diformat ulang. Misalnya, 'su' Snowflake akan menjadi 'SUNDAY' BigQuery. |
Catatan: Snowflake mendukung waktu tambahan. Misalnya, TIME_FROM_PARTS(0, 100, 0) akan menampilkan 01:40:00... Hal ini tidak didukung di BigQuery. BigQuery tidak mendukung nanodetik. |
|
|
Catatan: BigQuery tidak mendukung perbandingan langsung yang tepat dengan TIME_SLICE Snowflake. Gunakan DATETINE_TRUNC , TIME_TRUNC , TIMESTAMP_TRUNC untuk jenis data yang sesuai. |
|
|
Catatan: Snowflake mendukung penghitungan perbedaan antara dua jenis tanggal, waktu, dan stempel waktu dalam fungsi ini. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>) dan tahun ISO. |
|
Catatan: BigQuery mengharuskan stempel waktu yang dimasukkan sebagai jenis STRING . Contoh: "2008-12-25 15:30:00" |
|
|
Catatan: Snowflake mendukung penghitungan perbedaan antara dua jenis tanggal, waktu, dan stempel waktu dalam fungsi ini. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>) dan tahun ISO. |
Catatan: Snowflake mendukung jenis bagian nanodetik. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini
. |
Catatan: BigQuery mendukung jenis bagian minggu (<weekday>), minggu ISO, dan tahun ISO. Snowflake tidak demikian. |
|
|
BigQuery juga menawarkan fungsi tanggal dan waktu berikut, yang tidak memiliki analog langsung di Snowflake:
Fungsi tabel dan skema informasi
BigQuery tidak mendukung banyak fungsi tabel dan skema informasi Snowflake secara konseptual. Snowflake menawarkan skema informasi dan fungsi tabel berikut, yang tidak memiliki analog langsung di BigQuery:
AUTOMATIC_CLUSTERING_HISTORY
COPY_HISTORY
DATA_TRANSFER_HISTORY
DATABASE_REFRESH_HISTORY
DATABASE_REFRESH_PROGRESS, DATABASE_REFRESH_PROGRESS_BY_JOB
DATABASE_STORAGE_USAGE_HISTORY
EXTERNAL_TABLE_FILES
EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY
LOGIN_HISTORY
,LOGIN_HISTORY_BY_USER
MATERIALIZED_VIEW_REFRESH_HISTORY
PIPE_USAGE_HISTORY
REPLICATION_USAGE_HISTORY
STAGE_STORAGE_USAGE_HISTORY
TASK_DEPENDENTS
VALIDATE_PIPE_LOAD
WAREHOUSE_LOAD_HISTORY
WAREHOUSE_METERING_HISTORY
Berikut adalah daftar skema informasi dan fungsi tabel BigQuery dan Snowflake yang terkait.
Snowflake | BigQuery |
---|---|
QUERY_HISTORY QUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_* Catatan: Bukan alternatif langsung. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_* Catatan: Bukan alternatif langsung. |
BigQuery menawarkan skema informasi dan fungsi tabel berikut, yang tidak memiliki analog langsung di Snowflake:
INFORMATION_SCHEMA.SCHEMATA
INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.VIEWS
Fungsi numerik
Tabel berikut menunjukkan pemetaan antara fungsi numerik Snowflake umum dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Catatan: CEIL BigQuery tidak mendukung kemampuan untuk menunjukkan presisi atau skala. ROUND tidak memungkinkan Anda untuk melakukan pembulatan ke atas. |
|
|
|
|
|
|
|
|
|
|
|
BigQuery tidak memiliki alternatif langsung untuk FACTORIAL Snowflake. Gunakan fungsi yang ditentukan pengguna. |
|
Catatan: FLOOR BigQuery tidak mendukung kemampuan untuk menunjukkan presisi atau skala. ROUND tidak memungkinkan Anda untuk melakukan pembulatan ke atas. TRUNC berperforma secara sinonim untuk angka positif, tetapi bukan angka negatif, karena mengevaluasi nilai absolut. |
|
Catatan: Bukan kecocokan persis, tetapi cukup mendekati. |
|
|
|
Catatan:Basis default untuk LOG adalah 10. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Catatan: Nilai BigQuery yang ditampilkan harus lebih kecil dari ekspresi; tidak mendukung tanda sama dengan. |
BigQuery juga menawarkan fungsi matematika berikut, yang tidak memiliki analog langsung di Snowflake:
IS_INF
IS_NAN
IEEE_DIVIDE
DIV
SAFE_DIVIDE
SAFE_MULTIPLY
SAFE_NEGATE
SAFE_ADD
SAFE_SUBTRACT
RANGE_BUCKET
Fungsi data semi-terstruktur
Snowflake | BigQuery |
---|---|
ARRAY_APPEND |
Fungsi kustom yang ditentukan pengguna |
ARRAY_CAT |
ARRAY_CONCAT |
ARRAY_COMPACT |
Fungsi kustom yang ditentukan pengguna |
ARRAY_CONSTRUCT |
[ ] |
ARRAY_CONSTRUCT_COMPACT |
Fungsi kustom yang ditentukan pengguna |
ARRAY_CONTAINS |
Fungsi kustom yang ditentukan pengguna |
ARRAY_INSERT |
Fungsi kustom yang ditentukan pengguna |
ARRAY_INTERSECTION |
Fungsi kustom yang ditentukan pengguna |
ARRAY_POSITION |
Fungsi kustom yang ditentukan pengguna |
ARRAY_PREPEND |
Fungsi kustom yang ditentukan pengguna |
ARRAY_SIZE |
ARRAY_LENGTH |
ARRAY_SLICE |
Fungsi kustom yang ditentukan pengguna |
ARRAY_TO_STRING |
ARRAY_TO_STRING |
ARRAYS_OVERLAP |
Fungsi kustom yang ditentukan pengguna |
AS_<object_type> |
CAST |
AS_ARRAY |
CAST |
AS_BINARY |
CAST |
AS_BOOLEAN |
CAST |
AS_CHAR , AS_VARCHAR |
CAST |
AS_DATE |
CAST |
AS_DECIMAL , AS_NUMBER |
CAST |
AS_DOUBLE , AS_REAL |
CAST |
AS_INTEGER |
CAST |
AS_OBJECT |
CAST |
AS_TIME |
CAST |
AS_TIMESTAMP_* |
CAST |
CHECK_JSON |
Fungsi kustom yang ditentukan pengguna |
CHECK_XML |
Fungsi kustom yang ditentukan pengguna |
FLATTEN |
UNNEST |
GET |
Fungsi kustom yang ditentukan pengguna |
GET_IGNORE_CASE |
Fungsi kustom yang ditentukan pengguna |
|
Fungsi kustom yang ditentukan pengguna |
IS_<object_type> |
Fungsi kustom yang ditentukan pengguna |
IS_ARRAY |
Fungsi kustom yang ditentukan pengguna |
IS_BINARY |
Fungsi kustom yang ditentukan pengguna |
IS_BOOLEAN |
Fungsi kustom yang ditentukan pengguna |
IS_CHAR , IS_VARCHAR |
Fungsi kustom yang ditentukan pengguna |
IS_DATE , IS_DATE_VALUE |
Fungsi kustom yang ditentukan pengguna |
IS_DECIMAL |
Fungsi kustom yang ditentukan pengguna |
IS_DOUBLE , IS_REAL |
Fungsi kustom yang ditentukan pengguna |
IS_INTEGER |
Fungsi kustom yang ditentukan pengguna |
IS_OBJECT |
Fungsi kustom yang ditentukan pengguna |
IS_TIME |
Fungsi kustom yang ditentukan pengguna |
IS_TIMESTAMP_* |
Fungsi kustom yang ditentukan pengguna |
OBJECT_CONSTRUCT |
Fungsi kustom yang ditentukan pengguna |
OBJECT_DELETE |
Fungsi kustom yang ditentukan pengguna |
OBJECT_INSERT |
Fungsi kustom yang ditentukan pengguna |
PARSE_JSON |
JSON_EXTRACT |
PARSE_XML |
Fungsi kustom yang ditentukan pengguna |
STRIP_NULL_VALUE |
Fungsi kustom yang ditentukan pengguna |
STRTOK_TO_ARRAY |
SPLIT |
TRY_PARSE_JSON |
Fungsi kustom yang ditentukan pengguna |
TYPEOF |
Fungsi kustom yang ditentukan pengguna |
XMLGET |
Fungsi kustom yang ditentukan pengguna |
Fungsi string dan biner
Snowflake | BigQuery |
---|---|
|
|
ASCII |
|
BASE64_DECODE_BINARY |
|
BASE64_DECODE_STRING |
|
BASE64_ENCODE |
|
BIT_LENGTH |
CHARACTER_LENGTH |
|
|
CHR,CHAR |
|
COLLATE |
Fungsi kustom yang ditentukan pengguna |
COLLATION |
Fungsi kustom yang ditentukan pengguna |
COMPRESS |
Fungsi kustom yang ditentukan pengguna |
|
CONCAT (...) BigQuery mendukung penggabungan sejumlah string. |
CONTAINS |
Fungsi kustom yang ditentukan pengguna |
DECOMPRESS_BINARY |
Fungsi kustom yang ditentukan pengguna |
DECOMPRESS_STRING |
Fungsi kustom yang ditentukan pengguna |
EDITDISTANCE |
EDIT_DISTANCE |
ENDSWITH |
Fungsi kustom yang ditentukan pengguna |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
Fungsi kustom yang ditentukan pengguna |
ILIKE ANY |
Fungsi kustom yang ditentukan pengguna |
INITCAP |
INITCAP |
INSERT |
Fungsi kustom yang ditentukan pengguna |
LEFT |
Fungsi yang Ditentukan Pengguna |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
Fungsi kustom yang ditentukan pengguna |
LIKE ANY |
Fungsi kustom yang ditentukan pengguna |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
Fungsi kustom yang ditentukan pengguna |
OCTET_LENGTH |
Fungsi kustom yang ditentukan pengguna |
PARSE_IP |
Fungsi kustom yang ditentukan pengguna |
PARSE_URL |
Fungsi kustom yang ditentukan pengguna |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
Fungsi yang Ditentukan Pengguna |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
Fungsi kustom yang ditentukan pengguna |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
Fungsi kustom yang ditentukan pengguna |
SHA2,SHA2_HEX |
Fungsi kustom yang ditentukan pengguna |
SHA2_BINARY |
Fungsi kustom yang ditentukan pengguna |
SOUNDEX |
Fungsi kustom yang ditentukan pengguna |
SPACE |
Fungsi kustom yang ditentukan pengguna |
SPLIT |
SPLIT |
SPLIT_PART |
Fungsi kustom yang ditentukan pengguna |
SPLIT_TO_TABLE |
Fungsi kustom yang ditentukan pengguna |
STARTSWITH |
Fungsi kustom yang ditentukan pengguna |
STRTOK |
Catatan: Seluruh argumen string pembatas digunakan sebagai pembatas tunggal. Pemisah defaultnya adalah koma. |
STRTOK_SPLIT_TO_TABLE |
Fungsi kustom yang ditentukan pengguna |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
Fungsi kustom yang ditentukan pengguna |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
Fungsi kustom yang ditentukan pengguna |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
Fungsi kustom yang ditentukan pengguna |
|
UPPER |
Fungsi string (ekspresi reguler)
Snowflake | BigQuery |
---|---|
REGEXP |
|
REGEXP_COUNT |
Jika position ditentukan:
Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya. |
REGEXP_INSTR |
Jika position ditentukan:
Jika occurrence ditentukan:
Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya. |
|
|
REGEXP_REPLACE |
Jika replace_string ditentukan:
Jika position ditentukan:
Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya. |
REGEXP_SUBSTR |
Jika position ditentukan:
Jika occurrence ditentukan:
Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya. |
RLIKE |
|
Fungsi sistem
Snowflake | BigQuery |
---|---|
SYSTEM$ABORT_SESSION |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$ABORT_TRANSACTION |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$CANCEL_ALL_QUERIES |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$CANCEL_QUERY |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$CLUSTERING_DEPTH |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$CLUSTERING_INFORMATION |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$CLUSTERING_RATIO — Deprecated |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$CURRENT_USER_TASK_NAME |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$DATABASE_REFRESH_HISTORY |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$GET_AWS_SNS_IAM_POLICY |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$GET_PREDECESSOR_RETURN_VALUE |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$LAST_CHANGE_COMMIT_TIME |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$PIPE_FORCE_RESUME |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$PIPE_STATUS |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$SET_RETURN_VALUE |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$STREAM_GET_TABLE_TIMESTAMP |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$STREAM_HAS_DATA |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$TASK_DEPENDENTS_ENABLE |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$TYPEOF |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$WAIT |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$WHITELIST |
Fungsi kustom yang ditentukan pengguna |
SYSTEM$WHITELIST_PRIVATELINK |
Fungsi kustom yang ditentukan pengguna |
Fungsi tabel
Snowflake | BigQuery | |
---|---|---|
GENERATOR |
Fungsi kustom yang ditentukan pengguna | |
GET_OBJECT_REFERENCES |
Fungsi kustom yang ditentukan pengguna | |
RESULT_SCAN |
Fungsi kustom yang ditentukan pengguna | |
VALIDATE |
Fungsi kustom yang ditentukan pengguna |
Fungsi utilitas dan hash
Snowflake | BigQuery | |
---|---|---|
GET_DDL |
Permintaan Fitur | |
HASH |
HASH adalah fungsi eksklusif khusus Snowflake. Tidak dapat diterjemahkan tanpa mengetahui logika yang mendasari yang digunakan oleh Snowflake. |
Fungsi jendela
Snowflake | BigQuery | |
---|---|---|
CONDITIONAL_CHANGE_EVENT |
Fungsi kustom yang ditentukan pengguna | |
CONDITIONAL_TRUE_EVENT |
Fungsi kustom yang ditentukan pengguna | |
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
NTH_VALUE |
NTH_VALUE |
|
NTILE |
NTILE |
|
PERCENT_RANK |
PERCENT_RANK |
|
RANK |
RANK |
|
RATIO_TO_REPORT |
Fungsi kustom yang ditentukan pengguna | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
Fungsi kustom yang ditentukan pengguna |
BigQuery juga mendukung SAFE_CAST
(ekspresi
AS typename), yang menampilkan NULL jika BigQuery tidak dapat menjalankan transmisi (misalnya, SAFE_CAST
("apple"
AS INT64) menampilkan NULL).
Operator
Bagian berikut mencantumkan operator Snowflake dan BigQuery yang setara.
Operator aritmatika
Tabel berikut menunjukkan pemetaan antara operator aritmatika Snowflake dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
Catatan: BigQuery mendukung minus unary standar, tetapi tidak mengonversi bilangan bulat dalam format string ke jenis INT64 , NUMERIC , atau FLOAT64 . |
|
|
|
|
|
|
|
|
|
|
Untuk melihat skala dan detail presisi Snowflake saat melakukan operasi aritmetika, lihat dokumentasi Snowflake.
Operator perbandingan
Operator perbandingan Snowflake dan operator perbandingan BigQuery sama.
Operator logika/boolean
Operator logika/boolean Snowflake dan operator logika/boolean BigQuery sama.
Operator set
Tabel berikut menunjukkan pemetaan antara operator kumpulan Snowflake dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
|
INTERSECT DISTINCT
|
Catatan: MINUS dan EXCEPT adalah sinonim. |
|
|
|
Operator subkueri
Tabel berikut menunjukkan pemetaan antara operator subkueri Snowflake dengan BigQuery yang setara.
Snowflake | BigQuery |
---|---|
|
BigQuery tidak mendukung alternatif langsung untuk ALL/ANY Snowflake. |
|
|
|
|
|
Catatan: BigQuery memerlukan tanda kurung untuk memisahkan operasi kumpulan yang berbeda. Jika operator set yang sama diulang, tanda kurung tidak diperlukan. |
Sintaksis DML
Bagian ini membahas perbedaan sintaksis bahasa pengelolaan data antara Snowflake dan BigQuery.
Pernyataan INSERT
Snowflake menawarkan kata kunci DEFAULT
yang dapat dikonfigurasi untuk kolom. Di
BigQuery, nilai DEFAULT
untuk kolom nullable adalah NULL dan
DEFAULT
tidak didukung untuk kolom yang diperlukan. Sebagian besar pernyataan INSERT
Snowflake kompatibel dengan BigQuery. Tabel berikut menunjukkan pengecualian.
Snowflake | BigQuery |
---|---|
Catatan: BigQuery tidak mendukung penyisipan objek JSON dengan . pernyataan INSERT |
VALUES (DEFAULT [, ...]) Catatan: BigQuery tidak mendukung alternatif langsung untuk OVERWRITE Snowflake. Sebagai gantinya, gunakan DELETE . |
|
|
... Catatan:
<intoClause> mewakili INSERT statement standar, yang tercantum di atas. |
BigQuery tidak mendukung INSERTs multi-tabel kondisional dan tanpa syarat. |
BigQuery juga mendukung penyisipan nilai menggunakan subkueri (dengan salah satu nilai dihitung menggunakan subkueri), yang tidak didukung di Snowflake. Contoh:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
Pernyataan COPY
Snowflake mendukung penyalinan data dari file tahapan ke tabel yang sudah ada, dan dari tabel ke tahap internal bernama, tahap eksternal bernama, dan lokasi eksternal (Amazon S3, Google Cloud Storage, atau Microsoft Azure).
BigQuery tidak menggunakan perintah COPY
SQL untuk memuat data, tetapi Anda dapat menggunakan salah satu dari beberapa alat dan opsi non-SQL untuk memuat data ke dalam tabel BigQuery. Anda juga dapat menggunakan sink pipeline data
yang disediakan di
Apache Spark
atau
Apache Beam
untuk menulis data ke BigQuery.
Pernyataan UPDATE
Sebagian besar pernyataan UPDATE
Snowflake kompatibel dengan BigQuery. Tabel
berikut menunjukkan pengecualian.
Snowflake | BigQuery | |
---|---|---|
|
Catatan: Semua pernyataan UPDATE di BigQuery memerlukan kata kunci WHERE , yang diikuti dengan kondisi. |
Pernyataan DELETE
dan TRUNCATE TABLE
Pernyataan DELETE
dan TRUNCATE TABLE
adalah cara untuk menghapus baris dari tabel tanpa memengaruhi skema atau indeks tabel.
Di Snowflake, DELETE
dan TRUNCATE TABLE
mempertahankan data yang dihapus menggunakan Perjalanan Waktu Snowflake untuk tujuan pemulihan selama periode retensi data.
Namun, DELETE tidak menghapus histori pemuatan file eksternal dan metadata pemuatan.
Di BigQuery, pernyataan DELETE
harus memiliki klausul WHERE
. Untuk
mengetahui informasi selengkapnya tentang DELETE
di BigQuery, lihat
contohDELETE
BigQuery
dalam dokumentasi DML.
Snowflake | BigQuery |
---|---|
|
Catatan: Pernyataan DELETE BigQuery memerlukan klausa WHERE . |
Pernyataan MERGE
Pernyataan MERGE
dapat menggabungkan operasi INSERT
, UPDATE
, dan DELETE
menjadi satu pernyataan "upsert" dan menjalankan operasi secara otomatis. Operasi
MERGE
harus cocok dengan maksimal satu baris sumber untuk setiap baris target.
Tabel BigQuery dibatasi hingga 1.000 pernyataan DML per hari, sehingga Anda harus mengonsolidasikan pernyataan INSERT, UPDATE, dan DELETE secara optimal ke dalam satu pernyataan MERGE seperti yang ditunjukkan dalam tabel berikut:
Snowflake | BigQuery |
---|---|
Catatan: Snowflake mendukung parameter sesi ERROR_ON_NONDETERMINISTIC_MERGE untuk menangani hasil yang nondeterministik. |
Catatan: Semua kolom harus tercantum jika semua kolom diperbarui. |
Pernyataan GET
dan LIST
Pernyataan GET
mendownload file data dari salah satu tahapan Snowflake berikut ke
direktori/folder lokal di komputer klien:
- Tahap internal yang dinamai
- Tahap internal untuk tabel tertentu
- Tahap internal untuk pengguna saat ini
Pernyataan LIST
(LS) menampilkan daftar file yang telah dirilis bertahap (yaitu, diupload
dari sistem file lokal atau dihapus muatannya dari tabel) di salah satu tahap
Snowflake berikut:
- Tahap internal yang dinamai
- Tahap eksternal bernama
- Tahap untuk tabel tertentu
- Tahap untuk pengguna saat ini
BigQuery tidak mendukung konsep staging serta tidak memiliki padanan GET
dan LIST
.
Pernyataan PUT
dan REMOVE
Pernyataan PUT
mengupload (yaitu, mentahapkan) file data dari direktori/folder lokal pada komputer klien ke salah satu tahap Snowflake berikut:
- Tahap internal yang dinamai
- Tahap internal untuk tabel tertentu
- Tahap internal untuk pengguna saat ini
Pernyataan REMOVE
(RM)
menghapus file yang telah ditahapkan di salah satu tahap
internal Snowflake berikut:
- Tahap internal yang dinamai
- Tahap untuk tabel tertentu
- Tahap untuk pengguna saat ini
BigQuery tidak mendukung konsep staging serta tidak memiliki padanan PUT
dan REMOVE
.
Sintaksis DDL
Bagian ini membahas perbedaan sintaksis bahasa definisi data antara Snowflake dan BigQuery.
Database, Skema, dan Berbagi DDL
Sebagian besar terminologi Snowflake cocok dengan istilah BigQuery, kecuali bahwa Database Snowflake mirip dengan Set Data BigQuery. Lihat pemetaan terminologi Snowflake ke BigQuery yang mendetail.
Pernyataan CREATE DATABASE
Snowflake mendukung pembuatan dan pengelolaan database melalui perintah pengelolaan database, sementara BigQuery menyediakan banyak opsi, seperti menggunakan Console, CLI, Library Klien, dll. untuk membuat set data. Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan tersebut.
Snowflake | BigQuery |
---|---|
Catatan: Snowflake memberikan persyaratan ini untuk penamaan database. Hanya memungkinkan 255 karakter untuk nama. |
Catatan: BigQuery memiliki persyaratan penamaan set data yang serupa dengan Snowflake, tetapi BigQuery mengizinkan maksimum 1.024 karakter. |
|
Mengganti set data tidak didukung di BigQuery. |
|
Pembuatan set data sementara tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery |
|
Cloning set data belum didukung di BigQuery. |
|
Perjalanan waktu di level set data tidak didukung di BigQuery. Namun, perjalanan waktu untuk hasil kueri dan tabel didukung. |
|
Collasi dalam DDL tidak didukung di BigQuery. |
|
|
|
Pembuatan set data bersama tidak didukung di BigQuery. Namun, pengguna dapat membagikan set data melalui Konsol/UI setelah set data dibuat. |
Catatan: Snowflake menyediakan opsi untuk pemeliharaan latar belakang otomatis tampilan terwujud dalam database sekunder yang tidak didukung di BigQuery. |
|
BigQuery juga menawarkan opsi perintah bq mk
berikut, yang tidak memiliki analog langsung di Snowflake:
--location <dataset_location>
--default_table_expiration <time_in_seconds>
--default_partition_expiration <time_in_seconds>
Pernyataan ALTER DATABASE
Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan dalam pernyataan ALTER.
Snowflake | BigQuery |
---|---|
|
Penggantian nama set data tidak didukung di BigQuery, tetapi penyalinan set data didukung. |
|
Pertukaran set data tidak didukung di BigQuery. |
|
Mengelola retensi dan pengumpulan data pada tingkat set data tidak didukung di BigQuery. |
|
|
|
Konsep tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery. |
|
Konsep tidak didukung di BigQuery. |
Pernyataan DROP DATABASE
Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan dalam pernyataan DROP.
Snowflake | BigQuery |
---|---|
Catatan: Pada Snowflake, menghapus database tidak akan menghapusnya secara permanen dari sistem. Versi database yang dihapus akan dipertahankan selama jumlah hari yang ditentukan oleh parameter DATA_RETENTION_TIME_IN_DAYS untuk database. |
-r adalah untuk menghapus semua objek dalam set data
-d menunjukkan set dataCatatan: Di BigQuery, penghapusan set data bersifat permanen. Selain itu, berjenjang tidak didukung di tingkat set data karena semua data dan objek dalam set data telah dihapus. |
Snowflake juga mendukung
perintah UNDROP DATASET
yang memulihkan versi terbaru dari set data yang dihapus. Saat ini, tindakan ini tidak didukung di BigQuery di level set data.
Pernyataan USE DATABASE
Snowflake menyediakan opsi untuk menetapkan database bagi sesi pengguna menggunakan
perintah
USE DATABASE
. Dengan demikian, Anda tidak perlu menentukan nama objek yang sepenuhnya memenuhi syarat dalam
perintah SQL. BigQuery tidak menyediakan alternatif untuk perintah USE DATABASE dari Snowflake.
Pernyataan SHOW DATABASE
Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan dalam pernyataan SHOW.
Snowflake | BigQuery |
---|---|
Catatan: Snowflake menyediakan satu opsi untuk mencantumkan dan menampilkan detail tentang semua database, termasuk database yang dihapus yang berada dalam periode retensi. |
bq ls --format=prettyjsonand / or
Catatan: Di BigQuery, perintah ls hanya memberikan nama set data dan informasi dasar, dan perintah show memberikan detail seperti stempel waktu yang terakhir diubah, ACL, dan label set data. BigQuery juga memberikan detail selengkapnya tentang set data melalui Skema Informasi. |
Catatan: Dengan opsi TERSE, Snowflake hanya dapat menampilkan informasi/kolom tertentu tentang set data. |
Konsep tidak didukung di BigQuery. |
Konsep perjalanan waktu tidak didukung di BigQuery pada level set data. | |
SHOW DATABASES
|
Memfilter hasil menurut nama set data tidak didukung di BigQuery. Namun, pemfilteran menurut label didukung. |
SHOW DATABASES
Catatan: Secara default, Snowflake tidak membatasi jumlah hasil. Namun, nilai untuk LIMIT tidak boleh lebih dari 10 ribu. |
Catatan: Secara default, BigQuery hanya menampilkan 50 hasil. |
BigQuery juga menawarkan opsi perintah bq
berikut, yang tidak memiliki analog langsung di Snowflake:
- bq ls --format=pretty: Menampilkan hasil berformat dasar
- *bq ls -a: *Menampilkan hanya kumpulan data anonim (yang dimulai dengan garis bawah)
- bq ls --all: Menampilkan semua set data termasuk set data anonim
- bq ls --filter labels.key:value: Menampilkan hasil yang difilter menurut label set data
- bq ls --d: Mengecualikan hasil formulir set data anonim
- bq show --format=pretty: Menampilkan hasil berformat dasar yang mendetail untuk semua set data
Pengelolaan SCHEMA
Snowflake menyediakan beberapa perintah pengelolaan skema yang serupa dengan perintah pengelolaan database-nya. Konsep pembuatan dan pengelolaan skema ini tidak didukung di BigQuery.
Namun, BigQuery memungkinkan Anda menentukan skema tabel saat memuat data ke dalam tabel, dan saat membuat tabel kosong. Atau, Anda dapat menggunakan deteksi otomatis skema untuk format data yang didukung.
Pengelolaan SHARE
Snowflake menyediakan beberapa perintah pengelolaan berbagi yang mirip dengan perintah pengelolaan skema dan database. Konsep pembuatan dan pengelolaan berbagi ini tidak didukung di BigQuery.
DDL Tabel, Tampilan, dan Urutan
Pernyataan CREATE TABLE
Sebagian besar pernyataan CREATE TABLE
Snowflake kompatibel dengan BigQuery, kecuali untuk elemen sintaksis berikut, yang tidak digunakan di BigQuery:
Snowflake | BigQuery |
---|---|
Catatan: Batasan UNIQUE dan PRIMARY KEY bersifat informatif dan tidak diterapkan oleh sistem Snowflake. |
|
dengan table_constraints merupakan:
Catatan: Batasan
UNIQUE dan PRIMARY KEY bersifat informatif dan tidak diterapkan oleh sistem Snowflake. |
Catatan: BigQuery tidak menggunakan batasan tabel UNIQUE , PRIMARY KEY , atau FOREIGN KEY . Untuk mencapai pengoptimalan yang serupa dengan yang diberikan batasan ini selama eksekusi kueri, buat partisi dan kelompokkan tabel BigQuery Anda. CLUSTER BY mendukung hingga empat kolom. |
|
Lihat contoh ini untuk mempelajari cara menggunakan tabel INFORMATION_SCHEMA untuk menyalin nama kolom, jenis data, dan batasan NOT NULL ke tabel baru. |
Catatan:Di Snowflake, setelan BACKUP NO ditentukan untuk "menghemat waktu pemrosesan saat membuat snapshot dan memulihkan dari snapshot, serta untuk mengurangi ruang penyimpanan". |
Opsi tabel BACKUP NO tidak digunakan atau diperlukan karena BigQuery secara otomatis menyimpan hingga 7 hari versi historis dari semua tabel Anda, tanpa memengaruhi waktu pemrosesan atau penyimpanan yang ditagih. |
dengan table_attributes merupakan:
|
BigQuery mendukung pengelompokan yang memungkinkan penyimpanan kunci dalam urutan yang diurutkan. |
|
|
|
|
BigQuery juga mendukung pernyataan CREATE OR REPLACE
TABLE
pernyataan DDL yang menimpa tabel jika sudah ada.
Pernyataan CREATE TABLE
BigQuery juga mendukung klausa berikut, yang tidak memiliki padanan Snowflake:
Untuk mengetahui informasi selengkapnya tentang CREATE TABLE
di BigQuery, lihat contoh CREATE
BigQuery dalam dokumentasi DML.
Pernyataan ALTER TABLE
Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan dalam pernyataan ALTER untuk tabel.
Snowflake | BigQuery |
---|---|
|
|
|
Pertukaran tabel tidak didukung di BigQuery. |
|
Mengelola pengumpulan data untuk tabel tidak didukung di BigQuery. |
|
|
|
|
Selain itu, Snowflake menyediakan opsi pengelompokan, kolom, dan batasan untuk mengubah tabel yang tidak didukung oleh BigQuery.
Pernyataan DROP TABLE
dan UNDROP TABLE
Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan dalam pernyataan DROP dan UNDROP.
Snowflake | BigQuery |
---|---|
Catatan: Di Snowflake, melepaskan tabel tidak akan menghapusnya secara permanen dari sistem. Versi tabel yang dihapus akan dipertahankan selama jumlah hari yang ditentukan oleh parameter DATA_RETENTION_TIME_IN_DAYS untuk database. |
-f adalah untuk melewati konfirmasi eksekusi -d menunjukkan set data Catatan: Di BigQuery, penghapusan tabel juga tidak permanen tetapi snapshot saat ini hanya dipertahankan selama 7 hari. |
|
Catatan: Di BigQuery, Anda harus terlebih dahulu menentukan stempel waktu UNIX saat tabel ada (dalam milidetik). Kemudian, salin tabel pada stempel waktu tersebut ke tabel baru. Tabel baru harus memiliki nama yang berbeda dengan tabel yang dihapus. |
Pernyataan CREATE EXTERNAL TABLE
Dengan BigQuery, Anda dapat membuat tabel eksternal permanen dan sementara serta membuat kueri data secara langsung dari:
Snowflake memungkinkan pembuatan tabel eksternal permanen yang jika dikueri, akan membaca data dari kumpulan satu atau beberapa file dalam tahap eksternal yang ditentukan.
Bagian ini akan menggunakan perintah CLI BigQuery yang sesuai dengan perintah Snowflake untuk mengatasi perbedaan dalam pernyataan CREATE EXTERNAL TABLE.
Snowflake | BigQuery |
---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
Catatan: Snowflake memungkinkan pengelompokan file yang berisi data yang akan dibaca dan menentukan opsi jenis format untuk tabel eksternal. Jenis format Snowflake - CSV, JSON, AVRO, PARQUET, ORC semuanya didukung oleh BigQuery, kecuali jenis XML. |
Catatan: BigQuery memungkinkan pembuatan tabel permanen yang ditautkan ke sumber data Anda menggunakan file definisi tabel [1], file skema JSON [2], atau definisi skema inline [3]. Membuat staging file untuk dibaca dan menentukan opsi jenis format tidak didukung di BigQuery. |
|
Catatan: BigQuery saat ini tidak mendukung opsi parameter opsional apa pun yang disediakan oleh Snowflake untuk membuat tabel eksternal. Untuk pembuatan partisi, BigQuery mendukung penggunaan kolom semu _FILE_NAME untuk membuat tabel/tampilan yang dipartisi di atas tabel eksternal. Untuk mengetahui informasi selengkapnya, lihat
Mengkueri pseudokolom _FILE_NAME . |
Selain itu, BigQuery juga mendukung pembuatan kueri data yang dipartisi secara eksternal dalam format AVRO, PARQUET, ORC, JSON, dan CSV yang disimpan di Google Cloud Storage menggunakan tata letak partisi hive default.
Pernyataan CREATE VIEW
Tabel berikut menunjukkan padanan antara Snowflake dan BigQuery untuk pernyataan CREATE VIEW
.
Snowflake | BigQuery |
---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
Tidak didukung | CREATE VIEW IF NOT EXISTS
|
|
Di BigQuery, untuk membuat tampilan, semua objek yang direferensikan harus sudah ada. BigQuery memungkinkan untuk membuat kueri sumber data eksternal. |
Pernyataan CREATE SEQUENCE
Urutan tidak digunakan di BigQuery, ini dapat dilakukan dengan cara batch berikut. Untuk mengetahui informasi selengkapnya tentang kunci surrogate dan dimensi yang berubah secara perlahan (SCD), lihat panduan berikut:
|
---|
Pemuatan dan penghapusan muatan data DDL
Snowflake mendukung pemuatan dan penghapusan data melalui tahap, format file, dan perintah pengelolaan pipe. BigQuery juga menyediakan beberapa opsi untuk seperti pemuatan bq, BigQuery Data Transfer Service, ekstrak bq, dll. Bagian ini menyoroti perbedaan penggunaan metodologi ini untuk pemuatan dan penghapusan muatan data.
DDL Akun dan Sesi
Konsep Akun dan Sesi Snowflake tidak didukung di BigQuery. BigQuery memungkinkan pengelolaan akun melalui Cloud IAM di semua tingkat. Selain itu, transaksi multi-pernyataan belum didukung di BigQuery.
Fungsi yang ditentukan pengguna (UDF)
UDF memungkinkan Anda membuat fungsi untuk operasi kustom. Fungsi ini menerima kolom input, melakukan tindakan, dan menampilkan hasil tindakan tersebut sebagai nilai
Snowflake dan BigQuery mendukung UDF menggunakan ekspresi SQL dan Kode JavaScript.
Lihat repositori GitHub GoogleCloudPlatform/bigquery-utils/ untuk mengetahui library UDF BigQuery umum.
Sintaksis CREATE FUNCTION
Tabel berikut membahas perbedaan sintaksis pembuatan UDF SQL antara Snowflake dan BigQuery.
Snowflake | BigQuery |
---|---|
|
Catatan: Di BigQuery UDF pada SQL, jenis data yang ditampilkan bersifat opsional. BigQuery menyimpulkan jenis hasil fungsi dari isi fungsi SQL saat kueri memanggil fungsi. |
|
Catatan:Di SQL UDF BigQuery, jenis tabel yang ditampilkan saat ini tidak didukung, tetapi ada dalam roadmap produk dan akan segera tersedia. Namun, BigQuery mendukung ditampilkannya ARRAY jenis STRUCT. |
Catatan: Snowflake memberikan opsi yang aman untuk membatasi definisi dan detail UDF hanya kepada pengguna yang diberi otorisasi (yaitu, pengguna yang diberi peran yang memiliki tampilan). |
Catatan: Keamanan fungsi bukanlah parameter yang dapat dikonfigurasi di BigQuery. BigQuery mendukung pembuatan peran dan izin IAM guna membatasi akses ke data pokok dan definisi fungsi. |
|
Catatan: Perilaku fungsi untuk input null secara implisit ditangani di BigQuery dan tidak perlu ditentukan sebagai opsi terpisah. |
|
Catatan:Volatilitas fungsi bukanlah parameter yang dapat dikonfigurasi di BigQuery. Semua volatilitas BigQuery UDF setara dengan volatilitas IMMUTABLE Snowflake (artinya, tidak melakukan pencarian database atau menggunakan informasi yang tidak langsung ada dalam daftar argumennya). |
|
CREATE [OR REPLACE] FUNCTION
Catatan: Penggunaan tanda kutip tunggal atau rangkaian karakter seperti kutipan dolar ($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression. |
|
Note:Adding comments or descriptions in UDFs is currently not supported in BigQuery. |
|
Note: BigQuery supports using ANY TYPE as argument type. The function will accept an input of any type for this argument. For more information, see templated parameter in BigQuery. |
BigQuery also supports the CREATE FUNCTION IF NOT EXISTS
statement
which treats the query as successful and takes no action if a function with the
same name already exists.
BigQuery's CREATE FUNCTION
statement also supports creating
TEMPORARY or TEMP functions
,
which do not have a Snowflake equivalent. See
calling UDFs
for details on executing a BigQuery persistent UDF.
DROP FUNCTION
syntax
The following table addresses differences in DROP FUNCTION syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
|
Note: BigQuery does not require using the function's signature (argument data type) for deleting the function. |
BigQuery requires that you specify the project_name if the function is not located in the current project.
Additional function commands
This section covers additional UDF commands supported by Snowflake that are not directly available in BigQuery.
ALTER FUNCTION
syntax
Snowflake supports the following operations using
ALTER FUNCTION
syntax.
- Renaming a UDF
- Converting to (or reverting from) a secure UDF
- Adding, overwriting, removing a comment for a UDF
As configuring function security and adding function comments is not available in BigQuery, ALTER FUNCTION syntax is currently not supported. However, the CREATE FUNCTION statement can be used to create a UDF with the same function definition but a different name.
DESCRIBE FUNCTION
syntax
Snowflake supports describing a UDF using DESC[RIBE] FUNCTION syntax. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
SHOW USER FUNCTIONS
syntax
In Snowflake, SHOW USER FUNCTIONS syntax can be used to list all UDFs for which users have access privileges. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
Stored procedures
Snowflake stored procedures are written in JavaScript, which can execute SQL statements by calling a JavaScript API. In BigQuery, stored procedures are defined using a block of SQL statements.
CREATE PROCEDURE
syntax
In Snowflake, a stored procedure is executed with a CALL command while in BigQuery, stored procedures are executed like any other BigQuery function.
The following table addresses differences in stored procedure creation syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option. |
CREATE [OR REPLACE] PROCEDURE
Note: BigQuery doesn't support a return type for stored procedures. Also, it requires specifying argument mode for each argument passed. |
|
|
|
CREATE [OR REPLACE] PROCEDURE
Catatan: Perilaku prosedur untuk input null secara implisit ditangani di BigQuery dan tidak perlu ditentukan sebagai opsi terpisah. |
CREATE [OR REPLACE] PROCEDURE
|
Catatan:Ketidakstabilan prosedur bukanlah parameter yang dapat dikonfigurasi di BigQuery. Ini setara dengan volatilitas IMMUTABLE Snowflake. |
CREATE [OR REPLACE] PROCEDURE
|
Catatan:Menambahkan komentar atau deskripsi dalam definisi prosedur saat ini tidak didukung di BigQuery. |
CREATE [OR REPLACE] PROCEDURE
Catatan: Snowflake mendukung penentuan pemanggil atau pemilik prosedur eksekusi |
Catatan: Prosedur yang disimpan di BigQuery selalu dijalankan sebagai pemanggil |
BigQuery juga mendukung pernyataan CREATE PROCEDURE IF NOT EXISTS
yang memperlakukan kueri sebagai berhasil dan tidak mengambil tindakan jika fungsi dengan nama yang sama sudah ada.
Sintaksis DROP PROCEDURE
Tabel berikut membahas perbedaan sintaksis DROP FUNCTION antara Snowflake dan BigQuery.
Snowflake | BigQuery |
---|---|
|
Catatan: BigQuery tidak memerlukan penggunaan tanda tangan prosedur (jenis data argumen) untuk menghapus prosedur. |
BigQuery mengharuskan Anda menentukan project_name jika prosedur tidak berada di project saat ini.
Perintah prosedur tambahan
Snowflake menyediakan perintah tambahan seperti
ALTER PROCEDURE
.DESC[RIBE] PROCEDURE
,
dan
SHOW PROCEDURES
untuk mengelola prosedur yang tersimpan. Saat ini, perintah tersebut tidak didukung di BigQuery.
Pernyataan SQL transaksi dan metadata
Snowflake | BigQuery |
---|---|
|
BigQuery selalu menggunakan Snapshot Isolation. Untuk mengetahui detailnya, lihat Jaminan konsistensi di bagian lain dalam dokumen ini. |
|
Tidak digunakan di BigQuery. |
|
Tidak digunakan di BigQuery. |
|
Tidak digunakan di BigQuery. |
Pernyataan SQL multi-pernyataan dan multi-baris
Snowflake dan BigQuery mendukung transaksi (sesi) sehingga mendukung pernyataan yang dipisahkan oleh titik koma yang secara konsisten dijalankan bersama. Untuk informasi selengkapnya, lihat Transaksi multi-pernyataan.
Kolom metadata untuk file bertahap
Snowflake secara otomatis menghasilkan metadata untuk file dalam tahap internal dan eksternal. Metadata ini dapat dikueri dan dimuat ke dalam tabel bersama kolom data reguler. Kolom metadata berikut dapat digunakan:
Jaminan konsistensi dan transaction isolation
Snowflake dan BigQuery bersifat atomik—yaitu, mematuhi ACID pada tingkat per mutasi di banyak baris.
Transaksi
Setiap transaksi Snowflake diberi waktu mulai unik (termasuk milidetik) yang ditetapkan sebagai ID transaksi. Snowflake hanya mendukung
tingkat isolasi
READ COMMITTED
. Namun, sebuah pernyataan dapat melihat perubahan yang dibuat oleh pernyataan lain jika keduanya berada dalam transaksi yang sama, meskipun perubahan tersebut belum di-commit. Transaksi Snowflake memperoleh kunci pada resource (tabel) saat resource tersebut diubah. Pengguna dapat menyesuaikan waktu maksimum pernyataan
yang diblokir akan menunggu hingga waktu pernyataan Anda habis. Pernyataan DML
diotomatiskan jika parameter
AUTOCOMMIT
diaktifkan.
BigQuery juga mendukung transaksi. BigQuery membantu memastikan kontrol serentak optimis (kemenangan pertama dengan commit) dengan isolasi snapshot, di mana kueri membaca pesan terakhir yang di-commit data sebelum kueri dimulai. Pendekatan ini menjamin tingkat konsistensi yang sama pada basis per baris, per mutasi, dan di seluruh baris dalam pernyataan DML yang sama, namun menghindari deadlock. Dalam kasus beberapa update DML terhadap tabel yang sama, BigQuery akan beralih ke kontrol serentak pesimis. Tugas pemuatan dapat berjalan sepenuhnya secara independen dan ditambahkan ke tabel. Namun, BigQuery belum menyediakan batas transaksi atau sesi eksplisit.
Rollback
Jika sesi transaksi Snowflake tiba-tiba dihentikan sebelum transaksi di-commit atau di-roll back, transaksi akan dibiarkan dalam status terpisah. Pengguna harus menjalankan SYSTEM$ABORT_TRANSACTION untuk membatalkan transaksi yang terpisah, atau Snowflake akan me-roll back transaksi terpisah setelah empat jam tidak ada aktivitas. Jika terjadi deadlock, Snowflake akan mendeteksi deadlock dan memilih pernyataan yang lebih baru untuk melakukan roll back. Jika pernyataan DML dalam transaksi yang dibuka secara eksplisit gagal, perubahan akan di-roll back, tetapi transaksi akan tetap terbuka hingga di-commit atau di-roll back. Pernyataan DDL di Snowflake tidak dapat di-roll back karena di-commit secara otomatis.
BigQuery mendukung pernyataan ROLLBACK TRANSACTION
.
Tidak ada pernyataan ABORT
di BigQuery.
Batas database
Selalu periksa dokumentasi publik BigQuery untuk mengetahui kuota dan batas terbaru. Banyak kuota untuk pengguna bervolume besar dapat ditambah dengan menghubungi tim Dukungan Cloud.
Semua akun Snowflake memiliki batas yang dapat dilewati secara default. Batas sementara ditetapkan selama pembuatan akun dan dapat bervariasi. Banyak batas lunak Snowflake dapat dinaikkan melalui tim akun Snowflake atau tiket dukungan.
Tabel berikut menunjukkan perbandingan batas database Snowflake dan BigQuery.
Batas | Snowflake | BigQuery |
---|---|---|
Ukuran teks kueri | 1 MB | 1 MB |
Jumlah maksimum kueri serentak | XS Warehouse - 8 S Warehouse - 16 M Warehouse - 32 L Warehouse - 64 XL Warehouse - 128 |
100 |