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/
FLOAT4/
FLOAT8
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/
DOUBLE PRECISION/

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

SELECT TOP ...

FROM table

SELECT expression

FROM table

ORDER BY expression DESC

LIMIT number

SELECT

x/total AS probability,

ROUND(100 * probability, 1) AS pct

FROM raw_data


Catatan: Snowflake mendukung pembuatan dan perujukan alias dalam pernyataan SELECT yang sama.

SELECT

x/total AS probability,

ROUND(100 * (x/total), 1) AS pct

FROM raw_data

SELECT * FROM (

VALUES (1), (2), (3)

)

SELECT AS VALUE STRUCT(1, 2, 3)

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

SELECT $1, $2 FROM (VALUES (1, 'one'), (2, 'two'));

WITH table1 AS
(
SELECT STRUCT(1 as number, 'one' as spelling)
UNION ALL
SELECT STRUCT(2 as number, 'two' as spelling)
)
SELECT *
FROM table1

SELECT* FROM table SAMPLE(10)

SELECT* FROM table

TABLESAMPLE

BERNOULLI (0.1 PERCENT)

SELECT * FROM table1 AT(TIMESTAMP => timestamp) SELECT * FROM table1 BEFORE(STATEMENT => statementID)

SELECT * FROM table

FOR SYSTEM_TIME AS OF timestamp


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.

@[namespace]<stage_name>[/path]

BigQuery tidak mendukung konsep file bertahap.

SELECT*

FROM table

START WITH predicate

CONNECT BY

[PRIOR] col1 = [PRIOR] col2

[, ...]

...

BigQuery tidak menawarkan alternatif langsung untuk CONNECT BY Snowflake.

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:

Klausa WHERE

Klausa WHERE Snowflake dan klausa WHERE BigQuery identik, kecuali untuk hal berikut:

Snowflake BigQuery

SELECT col1, col2 FROM table1, table2 WHERE col1 = col2(+)

SELECT col1, col2
FROM table1 INNER JOIN table2
ON col1 = col2

Catatan: BigQuery tidak mendukung sintaksis (+) untuk JOIN

Jenis JOIN

Snowflake dan BigQuery mendukung jenis join berikut:

Snowflake dan BigQuery mendukung klausa ON dan USING.

Tabel berikut berisi daftar perbedaan kecil.

Snowflake BigQuery

SELECT col1

FROM table1

NATURAL JOIN

table2

SELECT col1

FROM table1

INNER JOIN

table2

USING (col1, col2 [, ...])


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.

SELECT ... FROM table1 AS t1, LATERAL ( SELECT*

FROM table2 AS t2

WHERE t1.col = t2.col )


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.

SELECT ... FROM table1 as t1 LEFT JOIN table2 as t2

ON t1.col = t2.col

Catatan: BigQuery tidak mendukung alternatif langsung untuk 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

SELECT col1 as one, col2 as two

FROM table GROUP BY (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY ROLLUP (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY ROLLUP (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY GROUPING SETS (one, 2)


Catatan: Snowflake memungkinkan hingga 128 kumpulan pengelompokan dalam blok kueri yang sama

SELECT col1 as one, col2 as two

FROM table GROUP BY GROUPING SETS (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY CUBE (one,2)


Catatan: Snowflake memungkinkan hingga 7 elemen (128 kumpulan pengelompokan) di setiap kubus

SELECT col1 as one, col2 as two

FROM table GROUP BY CUBE (one, 2)

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

SELECT col1, col2

FROM table

ORDER BY col1

LIMIT count OFFSET start


SELECT ...

FROM ...

ORDER BY ...

OFFSET start {[ROW | ROWS]} FETCH {[FIRST | NEXT]} count

{[ROW | ROWS]} [ONLY]


Catatan: Nilai NULL, string kosong (''), dan $$$$ diterima dan diperlakukan sebagai "tidak terbatas". Penggunaan utama adalah untuk penghubung dan driver.

SELECT col1, col2

FROM table

ORDER BY col1

LIMIT count OFFSET start


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

SELECT col1, col2 FROM table QUALIFY ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) = 1;

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

FROM ( SELECT col1, col2

ROW NUMBER() OVER (PARTITION BY col1 ORDER by col2) RN FROM table ) WHERE RN = 1;


Menggunakan ARRAY_AGG(), yang mendukung partisi lebih besar:

SELECT result.* FROM ( SELECT ARRAY_AGG(table ORDER BY table.col2 DESC LIMIT 1) [OFFSET(0)] FROM table

GROUP BY col1 ) AS result;

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

ANY_VALUE([DISTINCT] expression) [OVER ...]


Catatan: DISTINCT tidak memiliki pengaruh apa pun

ANY_VALUE(expression) [OVER ...]

APPROX_COUNT_DISTINCT([DISTINCT] expression) [OVER ...]


Catatan: DISTINCT tidak memiliki pengaruh apa pun

APPROX_COUNT_DISTINCT(expression)


Catatan: BigQuery tidak mendukung APPROX_COUNT_DISTINCT dengan Window Functions

APPROX_PERCENTILE(expression, percentile) [OVER ...]


Catatan: Snowflake tidak memiliki opsi untuk RESPECT NULLS

APPROX_QUANTILES([DISTINCT] expression,100) [OFFSET((CAST(TRUNC(percentile * 100) as INT64))]


Catatan: BigQuery tidak mendukung APPROX_QUANTILES dengan Window Functions

APPROX_PERCENTILE_ACCUMULATE (expression)

BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan.

APPROX_PERCENTILE_COMBINE(state)

BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan.

APPROX_PERCENTILE_ESTIMATE(state, percentile)

BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan.

APPROX_TOP_K(expression, [number [counters]]


Catatan: Jika tidak ada parameter angka yang ditentukan, defaultnya adalah 1. Penghitung harus lebih besar secara signifikan dari angka.

APPROX_TOP_COUNT(expression, number)


Catatan: BigQuery tidak mendukung APPROX_TOP_COUNT dengan Window Functions.

APPROX_TOP_K_ACCUMULATE(expression, counters)

BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan.

APPROX_TOP_K_COMBINE(state, [counters])

BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan.

APPROX_TOP_K_ESTIMATE(state, [k])

BigQuery tidak mendukung kemampuan untuk menyimpan status antara saat memprediksi nilai perkiraan.

APPROXIMATE_JACCARD_INDEX([DISTINCT] expression)


Anda dapat menggunakan UDF kustom untuk mengimplementasikan MINHASH dengan k fungsi hash yang berbeda. Pendekatan lain untuk mengurangi varians dalam MINHASH adalah mempertahankan
k dari nilai minimum satu fungsi hash. Dalam hal ini, indeks Jaccard dapat diperkirakan sebagai berikut:

WITH

minhash_A AS (

SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS h

FROM TA AS t

ORDER BY h

LIMIT k),

minhash_B AS (

SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS h

FROM TB AS t

ORDER BY h

LIMIT k)

SELECT

COUNT(*) / k AS APPROXIMATE_JACCARD_INDEX

FROM minhash_A

INNER JOIN minhash_B

ON minhash_A.h = minhash_B.h

APPROXIMATE_SIMILARITY([DISTINCT] expression)


Ini adalah sinonim dari APPROXIMATE_JACCARD_INDEX dan dapat diterapkan dengan cara yang sama.

ARRAY_AGG([DISTINCT] expression1) [WITHIN GROUP (ORDER BY ...)]

[OVER ([PARTITION BY expression2])]

Note: Snowflake does not support ability to IGNORE|RESPECT NULLS and to LIMIT directly in ARRAY_AGG.

ARRAY_AGG([DISTINCT] expression1

[{IGNORE|RESPECT}] NULLS] [ORDER BY ...] LIMIT ...])

[OVER (...)]

AVG([DISTINCT] expression) [OVER ...]

AVG([DISTINCT] expression) [OVER ...]


Catatan: AVG BigQuery tidak melakukan transmisi otomatis pada STRING.

BITAND_AGG(expression)

[OVER ...]

BIT_AND(expression) [OVER ...]

Catatan: BigQuery tidak secara implisit mentransmisikan kolom karakter/teks ke INTEGER terdekat.

BITOR_AGG(expression)

[OVER ...]

BIT_OR(expression)

[OVER ...]


Catatan: BigQuery tidak secara implisit mentransmisikan kolom karakter/teks ke INTEGER terdekat.

BITXOR_AGG([DISTINCT] expression) [OVER ...]

BIT_XOR([DISTINCT] expression) [OVER ...]


Catatan: BigQuery tidak secara implisit mentransmisikan kolom karakter/teks ke INTEGER terdekat.

BOOLAND_AGG(expression) [OVER ...]


Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.

LOGICAL_AND(expression)

[OVER ...]

BOOLOR_AGG(expression)

[OVER ...]


Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.

LOGICAL_OR(expression)

[OVER ...]

BOOLXOR_AGG(expression)

[OVER ([PARTITION BY <partition_expr> ])


Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.
Untuk ekspresi numerik:

SELECT

CASE COUNT(*)

WHEN 1 THEN TRUE

WHEN 0 THEN NULL

ELSE FALSE

END AS BOOLXOR_AGG

FROM T

WHERE expression != 0


Untuk menggunakan OVER, Anda dapat menjalankan kode berikut (contoh boolean diberikan):

SELECT

CASE COUNT(expression) OVER (PARTITION BY partition_expr)

WHEN 0 THEN NULL

ELSE

CASE COUNT(

CASE expression

WHEN TRUE THEN 1

END) OVER (PARTITION BY partition_expr)

WHEN 1 THEN TRUE

ELSE FALSE

END

END AS BOOLXOR_AGG

FROM T

CORR(dependent, independent)

[OVER ...]

CORR(dependent, independent)

[OVER ...]

COUNT([DISTINCT] expression [,expression2]) [OVER ...]

COUNT([DISTINCT] expression [,expression2]) [OVER ...]

COVAR_POP(dependent, independent) [OVER ...]

COVAR_POP(dependent, independent) [OVER ...]

COVAR_SAMP(dependent, independent)

[OVER ...]

COVAR_SAMP(dependent, independent)

[OVER ...]

GROUPING(expression1, [,expression2...])

BigQuery tidak mendukung alternatif langsung untuk GROUPING Snowflake. Tersedia melalui Fungsi yang Ditetapkan Pengguna.

GROUPING_ID(expression1, [,expression2...])

BigQuery tidak mendukung alternatif langsung untuk GROUPING_ID Snowflake. Tersedia melalui Fungsi yang Ditetapkan Pengguna.

HASH_AGG([DISTINCT] expression1, [,expression2])

[OVER ...]

SELECT
BIT_XOR(
FARM_FINGERPRINT(
TO_JSON_STRING(t))) [OVER]
FROM t

SELECT HLL([DISTINCT] expression1, [,expression2])

[OVER ...]


Catatan: Snowflake tidak memungkinkan Anda menentukan presisi.

SELECT HLL_COUNT.EXTRACT(sketch) FROM (

SELECT HLL_COUNT.INIT(expression)

AS sketch FROM table )


Catatan: BigQuery tidak mendukung HLL_COUNT… dengan Fungsi Jendela. Pengguna tidak dapat menyertakan beberapa ekspresi dalam satu fungsi HLL_COUNT....

HLL_ACCUMULATE([DISTINCT] expression)


Catatan: Snowflake tidak memungkinkan Anda menentukan presisi.
HLL_COUNT.INIT(expression [, precision])

HLL_COMBINE([DISTINCT] state)

HLL_COUNT.MERGE_PARTIAL(sketch)

HLL_ESTIMATE(state)

HLL_COUNT.EXTRACT(sketch)

HLL_EXPORT(binary)

BigQuery tidak mendukung alternatif langsung untuk HLL_EXPORT Snowflake.

HLL_IMPORT(object)

BigQuery tidak mendukung alternatif langsung untuk HLL_IMPORT Snowflake.

KURTOSIS(expression)

[OVER ...]

BigQuery tidak mendukung alternatif langsung untuk KURTOSIS Snowflake.

LISTAGG(

[DISTINCT] aggregate_expression

[, delimiter]

)

[OVER ...]

STRING_AGG(

[DISTINCT] aggregate_expression

[, delimiter]

)

[OVER ...]

MEDIAN(expression) [OVER ...]


Catatan: Snowflake tidak mendukung kemampuan untuk melakukan IGNORE|RESPECT NULLS dan LIMIT secara langsung di ARRAY_AGG.

PERCENTILE_CONT(

value_expression,

0.5

[ {RESPECT | IGNORE} NULLS]

) OVER()

MAX(expression) [OVER ...]


MIN(expression) [OVER ...]

MAX(expression) [OVER ...]


MIN(expression) [OVER ...]

MINHASH(k, [DISTINCT] expressions)

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

FROM t

ORDER BY MINHASH

LIMIT k

MINHASH_COMBINE([DISTINCT] state)

<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

MODE(expr1)

OVER ( [ PARTITION BY <expr2> ] )

SELECT expr1

FROM (

SELECT

expr1,

ROW_NUMBER() OVER (

PARTITION BY expr2

ORDER BY cnt DESC) rn

FROM (

SELECT

expr1,

expr2,

COUNTIF(expr1 IS NOT NULL) OVER

(PARTITION BY expr2, expr1) cnt

FROM t))

WHERE rn = 1

OBJECT_AGG(key, value) [OVER ...]

Anda dapat mempertimbangkan untuk menggunakan TO_JSON_STRING untuk mengonversi nilai ke dalam string berformat JSON

PERCENTILE_CONT(percentile) WITHIN GROUP (ORDER BY value_expression)

[OVER ...]

PERCENTILE_CONT(

value_expression,

percentile

[ {RESPECT | IGNORE} NULLS]

) OVER()

PERCENTILE_DISC(percentile) WITHIN GROUP (ORDER BY value_expression)

[OVER ...]

PERCENTILE_DISC(

value_expression,

percentile

[ {RESPECT | IGNORE} NULLS]

) OVER()

REGR_AVGX(dependent, independent)

[OVER ...]

SELECT AVG(independent) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_AVGY(dependent, independent)

[OVER ...]

SELECT AVG(dependent) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_COUNT(dependent, independent)

[OVER ...]

SELECT COUNT(*) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_INTERCEPT(dependent, independent)

[OVER ...]

SELECT

AVG(dependent) -

COVAR_POP(dependent,independent)/

VAR_POP(dependent) *

AVG(independent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_R2(dependent, independent)

[OVER ...]

SELECT

CASE

WHEN VAR_POP(independent) = 0

THEN NULL

WHEN VAR_POP(dependent) = 0 AND VAR_POP(independent) != 0

THEN 1

ELSE POWER(CORR(dependent, independent), 2)

END AS ...

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SLOPE(dependent, independent)

[OVER ...]

SELECT

COVAR_POP(dependent,independent)/

VAR_POP(dependent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SXX(dependent, independent)

[OVER ...]

SELECT COUNT(*)*VAR_POP(independent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SYY(dependent, independent)

[OVER ...]

SELECT COUNT(*)*VAR_POP(dependent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

SKEW(expression)

BigQuery tidak mendukung alternatif langsung untuk SKEW Snowflake.

STDDEV([DISTINCT] expression)

[OVER ...]

STDDEV([DISTINCT] expression)

[OVER ...]

STDDEV_POP([DISTINCT] expression)

[OVER ...]

STDDEV_POP([DISTINCT] expression)

[OVER ...]

STDDEV_SAMP([DISTINCT] expression)

[OVER ...]

STDDEV_SAMP([DISTINCT] expression)

[OVER ...]

SUM([DISTINCT] expression)

[OVER ...]

SUM([DISTINCT] expression)

[OVER ...]

VAR_POP([DISTINCT] expression)

[OVER ...]


Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point.

VAR_POP([DISTINCT] expression)

[OVER ...]

VARIANCE_POP([DISTINCT] expression)

[OVER ...]


Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point.

VAR_POP([DISTINCT] expression)

[OVER ...]

VAR_SAMP([DISTINCT] expression)

[OVER ...]


Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point.

VAR_SAMP([DISTINCT] expression)

[OVER ...]

VARIANCE([DISTINCT] expression)

[OVER ...]


Catatan: Snowflake mendukung kemampuan untuk mentransmisikan VARCHAR ke nilai floating point.

VARIANCE([DISTINCT] expression)

[OVER ...]

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

BITAND(expression1, expression2)

BIT_AND(x) FROM UNNEST([expression1, expression2]) AS x expression1 & expression2

BITNOT(expression)

~ expression

BITOR(expression1, expression2)

BIT_OR(x) FROM UNNEST([expression1, expression2]) AS x


expression1 | expression2

BITSHIFTLEFT (expression, n)

expression << n

BITSHIFTRIGHT

(expression, n)

expression >> n

BITXOR(expression, expression)


Catatan: Snowflake tidak mendukung DISTINCT.

BIT_XOR([DISTINCT] x) FROM UNNEST([expression1, expression2]) AS x


expression ^ expression

Fungsi ekspresi bersyarat

Tabel berikut menunjukkan pemetaan antara ekspresi kondisional Snowflake umum dengan BigQuery yang setara.

Snowflake BigQuery

expression [ NOT ] BETWEEN lower AND upper

(expression >= lower AND expression <= upper)

BOOLAND(expression1, expression2)


Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.

LOGICAL_AND(x)

FROM UNNEST([expression1, expression2]) AS x


expression1 AND expression2

BOOLNOT(expression1)


Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.

NOT expression

BOOLOR

Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.

LOGICAL_OR(x) FROM UNNEST([expression1, expression2]) AS x


expression1 OR expression2

BOOLXOR

Catatan: Snowflake memungkinkan nilai numerik, desimal, dan floating point diperlakukan sebagai TRUE jika bukan nol.
BigQuery tidak mendukung alternatif langsung untuk BOOLXOR. Snowflake

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

COALESCE(expr1, expr2, [,...])


Catatan: Snowflake memerlukan setidaknya dua ekspresi. BigQuery hanya memerlukan satu.

COALESCE(expr1, [,...])

DECODE(expression, search1, result1, [search2, result2...] [,default])

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

Catatan: BigQuery mendukung subkueri dalam pernyataan kondisi. Ini dapat digunakan untuk mereproduksi DECODE Snowflake. Pengguna harus menggunakan IS NULL bukan = NULL untuk mencocokkan NULL ekspresi pilih dengan ekspresi penelusuran NULL.

EQUAL_NULL(expression1, expression2)

BigQuery tidak mendukung alternatif langsung untuk EQUAL_NULL. Snowflake

GREATEST(expression1, [,expression2]...)

GREATEST(expression1, [,expression2]...)

IFF(condition, true_result, false_result)

IF(condition, true_result, false_result)

IFNULL(expression1, expression2)

IFNULL(expression1, expression2)

[ NOT ] IN ...

[ NOT ] IN ...

expression1 IS [ NOT ] DISTINCT FROM expression2

BigQuery tidak mendukung alternatif langsung untuk IS [ NOT ] DISTINCT FROM. Snowflake

expression IS [ NOT ] NULL

expression IS [ NOT ] NULL

IS_NULL_VALUE(variant_expr)

BigQuery tidak mendukung jenis data VARIANT.

LEAST(expression,...)

LEAST(expression,...)

NULLIF(expression1,expression2)

NULLIF(expression1,expression2)

NVL(expression1, expression2)

IFNULL(expression1,expression2)

NVL2(expr1,expr2,expr2)

IF(expr1 IS NOT NULL, expr2,expr3)

REGR_VALX(expr1,expr2)

IF(expr1 IS NULL, NULL, expr2)

Catatan: BigQuery tidak mendukung alternatif langsung untuk fungsi REGR... Snowflake.

REGR_VALY(expr1,expr2)

IF(expr2 IS NULL, NULL, expr1)


Catatan: BigQuery tidak mendukung alternatif langsung untuk fungsi REGR... Snowflake.

ZEROIFNULL(expression)

IFNULL(expression,0)

Fungsi konteks

Tabel berikut menunjukkan pemetaan antara fungsi konteks Snowflake umum dengan BigQuery yang setara.

Snowflake BigQuery

CURRENT_ACCOUNT()

SESSION_USER()


Catatan: Bukan perbandingan langsung. Snowflake menampilkan ID akun, BigQuery menampilkan alamat email pengguna.

CURRENT_CLIENT()

Konsep tidak digunakan di BigQuery

CURRENT_DATABASE()

SELECT catalog_name

FROM INFORMATION_SCHEMA.SCHEMATA

Tindakan ini akan menampilkan tabel nama project. Bukan perbandingan langsung.

CURRENT_DATE[()]


Catatan: Snowflake tidak menerapkan '()' setelah perintah CURRENT_DATE untuk mematuhi standar ANSI.

CURRENT_DATE([timezone])


Catatan: CURRENT_DATE BigQuery mendukung spesifikasi zona waktu opsional.

CURRENT_REGION()

SELECT location

FROM INFORMATION_SCHEMA.SCHEMATA


Catatan: INFORMATION_SCHEMA.SCHEMATA BigQuery menampilkan referensi lokasi yang lebih umum daripada CURRENT_REGION() Snowflake. Bukan perbandingan langsung.

CURRENT_ROLE()

Konsep tidak digunakan di BigQuery

CURRENT_SCHEMA()

SELECT schema_name

FROM INFORMATION_SCHEMA.SCHEMATA

Tindakan ini akan menampilkan tabel semua set data (juga disebut skema) yang tersedia di project atau region. Bukan perbandingan langsung.

CURRENT_SCHEMAS()

Konsep tidak digunakan di BigQuery

CURRENT_SESSION()

Konsep tidak digunakan di BigQuery

CURRENT_STATEMENT()

SELECT query

FROM INFORMATION_SCHEMA.JOBS_BY_*


Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran kueri berdasarkan jenis tugas, jenis awal/akhir, dll.

CURRENT_TIME[([frac_sec_prec])]


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 '()'.

CURRENT_TIME()

CURRENT_TIMESTAMP[([frac_sec_prec])]


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.

CURRENT_DATETIME([timezone]) CURRENT_TIMESTAMP()


Catatan: CURRENT_DATETIME menampilkan jenis data DATETIME (tidak didukung di Snowflake). CURRENT_TIMESTAMP menampilkan jenis data TIMESTAMP.

CURRENT_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*

Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran ID tugas berdasarkan jenis tugas, jenis awal/akhir, dll.

CURRENT_USER[()]


Catatan: Snowflake tidak menerapkan '()' setelah perintah CURRENT_USER untuk mematuhi standar ANSI.

SESSION_USER()


SELECT user_email

FROM INFORMATION_SCHEMA.JOBS_BY_*

Catatan: Bukan perbandingan langsung. Snowflake menampilkan nama pengguna; BigQuery menampilkan alamat email pengguna.

CURRENT_VERSION()

Konsep tidak digunakan di BigQuery

CURRENT_WAREHOUSE()

SELECT catalg_name

FROM INFORMATION_SCHEMA.SCHEMATA

LAST_QUERY_ID([num])

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran ID tugas berdasarkan jenis tugas, jenis awal/akhir, dll.

LAST_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


Catatan: INFORMATION_SCHEMA.JOBS_BY_* BigQuery memungkinkan penelusuran ID tugas berdasarkan jenis tugas, jenis awal/akhir, dll.

LOCALTIME()


Catatan: Snowflake tidak menerapkan '()' setelah perintah LOCALTIME untuk mematuhi standar ANSI.

CURRENT_TIME()

LOCALTIMESTAMP()

CURRENT_DATETIME([timezone]) CURRENT_TIMESTAMP()


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

CAST(expression AS type)


expression :: type

CAST(expression AS type)

TO_ARRAY(expression)

[expression]


ARRAY(subquery)

TO_BINARY(expression[, format])


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.

TO_HEX(CAST(expression AS BYTES)) TO_BASE64(CAST(expression AS BYTES))

CAST(expression AS BYTES)


Catatan: Transmisi STRING default BigQuery menggunakan encoding UTF-8. Snowflake tidak memiliki opsi untuk mendukung encoding BASE32.

TO_BOOLEAN(expression)


Catatan:
  • INT64
    TRUE:
    atau, FALSE: 0
  • STRING
    TRUE: "true"/"t"/"yes"/"y"/"on"/"1", FALSE: "false"/"f"/"no"/"n"/"off"/"0"

CAST(expression AS BOOL)


Catatan:
  • INT64
    TRUE:
    atau, FALSE: 0
  • STRING
    TRUE: "true", FALSE: "false"

TO_CHAR(expression[, format])


TO_VARCHAR(expression[, format])


Catatan: Model format Snowflake dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT.

CAST(expression AS STRING)


Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME, atau FORMAT_TIMESTAMP.

TO_DATE(expression[, format])


DATE(expression[, format])


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.

CAST(expression AS DATE)


Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT, FORMAT_DATETIME, atau FORMAT_TIMESTAMP.

TO_DECIMAL(expression[, format]

[,precision[, scale]]


TO_NUMBER(expression[, format]

[,precision[, scale]]


TO_NUMERIC(expression[, format]

[,precision[, scale]]


Catatan: Model format Snowflake untuk jenis data DECIMAL, NUMBER, dan NUMERIC dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT.

ROUND(CAST(expression AS NUMERIC)

, x)


Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT.

TO_DOUBLE(expression[, format])


Catatan: Model format Snowflake untuk jenis data DOUBLE dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT.

CAST(expression AS FLOAT64)


Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT.

TO_JSON(variant_expression)

BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake.

TO_OBJECT(variant_expression)

BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake.

TO_TIME(expression[, format])


TIME(expression[, format])


Catatan: Model format Snowflake untuk jenis data STRING dapat ditemukan di sini. BigQuery tidak memiliki alternatif untuk jenis data VARIANT.

CAST(expression AS TIME)


Catatan: BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake. Ekspresi input BigQuery dapat diformat menggunakan FORMAT, FORMAT_DATETIME, FORMAT_TIMESTAMP, atau FORMAT_TIME.

TO_TIMESTAMP(expression[, scale])


TO_TIMESTAMP_LTZ(expression[, scale])


TO_TIMESTAMP_NTZ(expression[, scale])


TO_TIMESTAMP_TZ(expression[, scale])


Catatan: BigQuery tidak memiliki alternatif untuk jenis data VARIANT.

CAST(expression AS TIMESTAMP)


Catatan: Ekspresi input BigQuery dapat diformat menggunakan FORMAT, FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME. Zona waktu dapat disertakan/tidak disertakan melalui parameter FORMAT_TIMESTAMP.

TO_VARIANT(expression)

BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake.

TO_XML(variant_expression)

BigQuery tidak memiliki alternatif untuk jenis data VARIANT Snowflake.

TRY_CAST(expression AS type)

SAFE_CAST(expression AS type)

TRY_TO_BINARY(expression[, format])

TO_HEX(SAFE_CAST(expression AS BYTES)) TO_BASE64(SAFE_CAST(expression AS BYTES))

SAFE_CAST(expression AS BYTES)

TRY_TO_BOOLEAN(expression)

SAFE_CAST(expression AS BOOL)

TRY_TO_DATE(expression)

SAFE_CAST(expression AS DATE)

TRY_TO_DECIMAL(expression[, format]

[,precision[, scale]]


TRY_TO_NUMBER(expression[, format]

[,precision[, scale]]


TRY_TO_NUMERIC(expression[, format]

[,precision[, scale]]

ROUND(

SAFE_CAST(expression AS NUMERIC)

, x)

TRY_TO_DOUBLE(expression)

SAFE_CAST(expression AS FLOAT64)

TRY_TO_TIME(expression)

SAFE_CAST(expression AS TIME)

TRY_TO_TIMESTAMP(expression)


TRY_TO_TIMESTAMP_LTZ(expression)


TRY_TO_TIMESTAMP_NTZ(expression)


TRY_TO_TIMESTAMP_TZ(expression)

SAFE_CAST(expression AS TIMESTAMP)

BigQuery juga menawarkan fungsi konversi berikut, yang tidak memiliki analog langsung di Snowflake:

Fungsi pembuatan data

Tabel berikut menunjukkan pemetaan antara fungsi pembuatan data Snowflake yang umum dengan BigQuery yang setara.

Snowflake BigQuery

NORMAL(mean, stddev, gen)

BigQuery tidak mendukung perbandingan langsung dengan NORMAL. Snowflake

RANDOM([seed])

IF(RAND()>0.5, CAST(RAND()*POW(10, 18) AS INT64),

(-1)*CAST(RAND()*POW(10, 18) AS

INT64))


Catatan: BigQuery tidak mendukung seeding

RANDSTR(length, gen)

BigQuery tidak mendukung perbandingan langsung dengan RANDSTR. Snowflake
SEQ1 / SEQ2 / SEQ4 / SEQ8 BigQuery tidak mendukung perbandingan langsung dengan SEQ_. Snowflake

UNIFORM(min, max, gen)

CAST(min + RAND()*(max-min) AS INT64)


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).

GENERATE_UUID()


Catatan: BigQuery menampilkan 122 bit acak. BigQuery hanya mendukung UUID versi 4.

ZIPF(s, N, gen)

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

ADD_MONTHS(date, months)

CAST(

DATE_ADD(

date,

INTERVAL integer MONTH

) AS TIMESTAMP

)

CONVERT_TIMEZONE(source_tz, target_tz, source_timestamp)


CONVERT_TIMEZONE(target_tz, source_timestamp)

PARSE_TIMESTAMP(

"%c%z",

FORMAT_TIMESTAMP(

"%c%z",

timestamp,

target_timezone

)

)


Catatan: source_timezone di BigQuery selalu dalam UTC

DATE_FROM_PARTS(year, month, day)


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.

DATE(year, month, day)


DATE(timestamp_expression[, timezone])


DATE(datetime_expression)

DATE_PART(part, dateOrTime)


Catatan: Snowflake mendukung jenis bagian ISO, nanodetik, dan epoch hari dalam seminggu. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini .

EXTRACT(part FROM dateOrTime)


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.

DATE_TRUNC(part, dateOrTime)


Catatan: Snowflake mendukung jenis bagian nanodetik. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini .

DATE_TRUNC(date, part)


DATETIME_TRUNC(datetime, part)


TIME_TRUNC(time, part)


TIMESTAMP_TRUNC(timestamp, part[, timezone])


Catatan: BigQuery mendukung jenis bagian minggu (<weekday>), minggu ISO, dan tahun ISO. Snowflake tidak demikian.

DATEADD(part, value, dateOrTime)

DATE_ADD(date, INTERVAL value part)

DATEDIFF(

part,

expression1,

expression2

)


Catatan: Snowflake mendukung penghitungan perbedaan antara dua jenis tanggal, waktu, dan stempel waktu dalam fungsi ini.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


Catatan: BigQuery mendukung jenis bagian minggu (<weekday>) dan tahun ISO.

DAYNAME(dateOrTimestamp)

FORMAT_DATE('%a', date)


FORMAT_DATETIME('%a', datetime)


FORMAT_TIMESTAMP('%a', timestamp)

EXTRACT(part FROM dateOrTime)


Catatan: Snowflake mendukung jenis bagian ISO, nanodetik, dan epoch hari dalam seminggu. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini .

EXTRACT(part FROM dateOrTime)


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.

[HOUR, MINUTE, SECOND](timeOrTimestamp)

EXTRACT(part FROM timestamp [AT THE ZONE timezone])

LAST_DAY(dateOrTime[, part])

DATE_SUB( DATE_TRUNC(

DATE_ADD(date, INTERVAL

1 part),

part),

INTERVAL 1 DAY)

MONTHNAME(dateOrTimestamp)

FORMAT_DATE('%b', date)


FORMAT_DATETIME('%b', datetime)


FORMAT_TIMESTAMP('%b', timestamp)

NEXT_DAY(dateOrTime, dowString)

DATE_ADD(

DATE_TRUNC(

date,

WEEK(dowString)),

INTERVAL 1 WEEK)


Catatan: dowString mungkin perlu diformat ulang. Misalnya, 'su' Snowflake akan menjadi 'SUNDAY' BigQuery.

PREVIOUS_DAY(dateOrTime, dowString)

DATE_TRUNC(

date,

WEEK(dowString)

)


Catatan: dowString mungkin perlu diformat ulang. Misalnya, 'su' Snowflake akan menjadi 'SUNDAY' BigQuery.

TIME_FROM_PARTS(hour, minute, second[, nanosecond)


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.

TIME(hour, minute, second)


TIME(timestamp, [timezone])


TIME(datetime)

TIME_SLICE(dateOrTime, sliceLength, part[, START]


TIME_SLICE(dateOrTime, sliceLength, part[, END]

DATE_TRUNC(

DATE_SUB(CURRENT_DATE(),

INTERVAL value MONTH),

MONTH)


DATE_TRUNC(

DATE_ADD(CURRENT_DATE(),

INTERVAL value MONTH),

MONTH)


Catatan: BigQuery tidak mendukung perbandingan langsung yang tepat dengan TIME_SLICE Snowflake. Gunakan DATETINE_TRUNC, TIME_TRUNC, TIMESTAMP_TRUNC untuk jenis data yang sesuai.

TIMEADD(part, value, dateOrTime)

TIME_ADD(time, INTERVAL value part)

TIMEDIFF(

part,

expression1,

expression2,

)


Catatan: Snowflake mendukung penghitungan perbedaan antara dua jenis tanggal, waktu, dan stempel waktu dalam fungsi ini.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


Catatan: BigQuery mendukung jenis bagian minggu (<weekday>) dan tahun ISO.

TIMESTAMP_[LTZ, NTZ, TZ _]FROM_PARTS (year, month, day, hour, second [, nanosecond][, timezone])

TIMESTAMP(

string_expression[, timezone] | date_expression[, timezone] |

datetime_expression[, timezone]

)


Catatan: BigQuery mengharuskan stempel waktu yang dimasukkan sebagai jenis STRING. Contoh: "2008-12-25 15:30:00"

TIMESTAMPADD(part, value, dateOrTime)

TIMESTAMPADD(timestamp, INTERVAL value part)

TIMESTAMPDIFF(

part,

expression1,

expression2,

)


Catatan: Snowflake mendukung penghitungan perbedaan antara dua jenis tanggal, waktu, dan stempel waktu dalam fungsi ini.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


Catatan: BigQuery mendukung jenis bagian minggu (<weekday>) dan tahun ISO.

TRUNC(dateOrTime, part)


Catatan: Snowflake mendukung jenis bagian nanodetik. BigQuery tidak demikian. Lihat daftar lengkap jenis suku cadang Snowflake di sini .

DATE_TRUNC(date, part)


DATETIME_TRUNC(datetime, part)


TIME_TRUNC(time, part)


TIMESTAMP_TRUNC(timestamp, part[, timezone])


Catatan: BigQuery mendukung jenis bagian minggu (<weekday>), minggu ISO, dan tahun ISO. Snowflake tidak demikian.

[YEAR*, DAY*, WEEK*, MONTH, QUARTER](dateOrTimestamp)

EXTRACT(part FROM timestamp [AT THE ZONE timezone])

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:

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:

Fungsi numerik

Tabel berikut menunjukkan pemetaan antara fungsi numerik Snowflake umum dengan BigQuery yang setara.

Snowflake BigQuery

ABS(expression)

ABS(expression)

ACOS(expression)

ACOS(expression)

ACOSH(expression)

ACOSH(expression)

ASIN(expression)

ASIN(expression)

ASINH(expression)

ASINH(expression)

ATAN(expression)

ATAN(expression)

ATAN2(y, x)

ATAN2(y, x)

ATANH(expression)

ATANH(expression)

CBRT(expression)

POW(expression, ⅓)

CEIL(expression [, scale])

CEIL(expression)


Catatan: CEIL BigQuery tidak mendukung kemampuan untuk menunjukkan presisi atau skala. ROUND tidak memungkinkan Anda untuk melakukan pembulatan ke atas.

COS(expression)

COS(expression)

COSH(expression)

COSH(expression)

COT(expression)

1/TAN(expression)

DEGREES(expression)

(expression)*(180/ACOS(-1))

EXP(expression)

EXP(expression)

FACTORIAL(expression)

BigQuery tidak memiliki alternatif langsung untuk FACTORIAL Snowflake. Gunakan fungsi yang ditentukan pengguna.

FLOOR(expression [, scale])

FLOOR(expression)


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.

HAVERSINE(lat1, lon1, lat2, lon2)

ST_DISTANCE( ST_GEOGPOINT(lon1, lat1),

ST_GEOGPOINT(lon2, lat2)

)/1000


Catatan: Bukan kecocokan persis, tetapi cukup mendekati.

LN(expression)

LN(expression)

LOG(base, expression)

LOG(expression [,base])


LOG10(expression)


Catatan:Basis default untuk LOG adalah 10.

MOD(expression1, expression2)

MOD(expression1, expression2)

PI()

ACOS(-1)

POW(x, y)


POWER(x, y)

POW(x, y)


POWER(x, y)

RADIANS(expression)

(expression)*(ACOS(-1)/180)

ROUND(expression [, scale])

ROUND(expression, [, scale])

SIGN(expression)

SIGN(expression)

SIN(expression)

SIN(expression)

SINH(expression)

SINH(expression)

SQRT(expression)

SQRT(expression)

SQUARE(expression)

POW(expression, 2)

TAN(expression)

TAN(expression)

TANH(expression)

TANH(expression)

TRUNC(expression [, scale])


TRUNCATE(expression [, scale])

TRUNC(expression [, scale])


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:

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

GET_PATH , :

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

string1 || string2

CONCAT(string1, string2)

ASCII

TO_CODE_POINTS(string1)[OFFSET(0)]

BASE64_DECODE_BINARY

SAFE_CONVERT_BYTES_TO_STRING(

FROM_BASE64(<bytes_input>)

)

BASE64_DECODE_STRING

SAFE_CONVERT_BYTES_TO_STRING(

FROM_BASE64(<string1>)

)

BASE64_ENCODE

TO_BASE64(

SAFE_CAST(<string1> AS BYTES)

)

BIT_LENGTH

BYTE_LENGTH * 8

CHARACTER_LENGTH

CHARINDEX(substring, string)

STRPOS(string, substring)

CHR,CHAR

CODE_POINTS_TO_STRING([number])

COLLATE Fungsi kustom yang ditentukan pengguna
COLLATION Fungsi kustom yang ditentukan pengguna
COMPRESS Fungsi kustom yang ditentukan pengguna

CONCAT(string1, string2)

CONCAT(string1, string2)

Catatan: 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

SAFE_CONVERT_BYTES_TO_STRING(

FROM_HEX(<string1>)

HEX_DECODE_STRING

SAFE_CONVERT_BYTES_TO_STRING(

FROM_HEX(<string1>)

HEX_ENCODE

TO_HEX(

SAFE_CAST(<string1> AS BYTES))

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

LENGTH(expression)

LIKE LIKE
LIKE ALL Fungsi kustom yang ditentukan pengguna
LIKE ANY Fungsi kustom yang ditentukan pengguna
LOWER

LOWER(string)

LPAD

LPAD(string1, length[, string2])

LTRIM

LTRIM(string1, trim_chars)

MD5,MD5_HEX

MD5(string)

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

STRPOS(string, substring)

REPEAT

REPEAT(string, integer)

REPLACE

REPLACE(string1, old_chars, new_chars)

REVERSE

number_characters

)

REVERSE(expression)

RIGHT Fungsi yang Ditentukan Pengguna
RPAD RPAD
RTRIM

RTRIM(string, trim_chars)

RTRIMMED_LENGTH Fungsi kustom yang ditentukan pengguna
SHA1,SHA1_HEX

SHA1(string)

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

SPLIT(instring, delimiter)[ORDINAL(tokennum)]


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

SUBSTR(string, 0, integer)

TRY_HEX_DECODE_BINARY

SUBSTR(string, -integer)

TRY_HEX_DECODE_STRING

LENGTH(expression)

UNICODE Fungsi kustom yang ditentukan pengguna

UPPER

UPPER

Fungsi string (ekspresi reguler)

Snowflake BigQuery
REGEXP

IF(REGEXP_CONTAINS,1,0)=1

REGEXP_COUNT

ARRAY_LENGTH(

REGEXP_EXTRACT_ALL(

source_string,

pattern

)

)


Jika position ditentukan:

ARRAY_LENGTH(

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)

)


Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya.
REGEXP_INSTR

IFNULL(

STRPOS(

source_string,

REGEXP_EXTRACT(

source_string,

pattern)

), 0)


Jika position ditentukan:

IFNULL(

STRPOS(

SUBSTR(source_string, IF(position <= 0, 1, position)),

REGEXP_EXTRACT(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern)

) + IF(position <= 0, 1, position) - 1, 0)


Jika occurrence ditentukan:

IFNULL(

STRPOS(

SUBSTR(source_string, IF(position <= 0, 1, position)),

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)[SAFE_ORDINAL(occurrence)]

) + IF(position <= 0, 1, position) - 1, 0)


Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya.

REGEXP_LIKE

IF(REGEXP_CONTAINS,1,0)=1

REGEXP_REPLACE

REGEXP_REPLACE(

source_string,

pattern,

""

)


Jika replace_string ditentukan:

REGEXP_REPLACE(

source_string,

pattern,

replace_string

)


Jika position ditentukan:

CASE

WHEN position > LENGTH(source_string) THEN source_string

WHEN position <= 0 THEN

REGEXP_REPLACE(

source_string,

pattern,

""

)

ELSE

CONCAT(

SUBSTR(

source_string, 1, position - 1),

REGEXP_REPLACE(

SUBSTR(source_string, position),

pattern,

replace_string

)

)

END


Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya.
REGEXP_SUBSTR

REGEXP_EXTRACT(

source_string,

pattern

)


Jika position ditentukan:

REGEXP_EXTRACT(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)


Jika occurrence ditentukan:

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)[SAFE_ORDINAL(occurrence)]


Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2; lihat dokumentasi tersebut untuk sintaks ekspresi regulernya.
RLIKE

IF(REGEXP_CONTAINS,1,0)=1

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

(Unary) (+'5')

CAST("5" AS NUMERIC)

a + b

a + b

(Unary) (-'5')

(-1) * CAST("5" AS NUMERIC)


Catatan: BigQuery mendukung minus unary standar, tetapi tidak mengonversi bilangan bulat dalam format string ke jenis INT64, NUMERIC, atau FLOAT64.

a - b

a - b

date1 - date2


date1 - 365

DATE_DIFF(date1, date2, date_part) DATE_SUB(date1, date2, date_part)

a * b

a * b

a / b

a / b

a % b

MOD(a, b)

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

SELECT ... INTERSECT SELECT ...

SELECT ...

INTERSECT DISTINCT

SELECT...

SELECT ... MINUS SELECT ...

SELECT ... EXCEPT SELECT …


Catatan: MINUS dan EXCEPT adalah sinonim.

SELECT ... EXCEPT DISTINCT SELECT ...

SELECT ... UNION SELECT ...

SELECT ... UNION ALL SELECT ...

SELECT ... UNION DISTINCT SELECT ...


SELECT ... UNION ALL SELECT ...

Operator subkueri

Tabel berikut menunjukkan pemetaan antara operator subkueri Snowflake dengan BigQuery yang setara.

Snowflake BigQuery

SELECT ... FROM ... WHERE col <operator> ALL … SELECT ... FROM ... WHERE col <operator> ANY ...

BigQuery tidak mendukung alternatif langsung untuk ALL/ANY Snowflake.

SELECT ... FROM ...

WHERE [NOT] EXISTS...

SELECT ... FROM ...

WHERE [NOT] EXISTS...

SELECT ... FROM ...

WHERE [NOT] IN...

SELECT ... FROM ...

WHERE [NOT] IN...

SELECT * FROM table1

UNION

SELECT * FROM table2

EXCEPT

SELECT * FROM table3

SELECT * FROM table1

UNION ALL

(

SELECT * FROM table2

EXCEPT

SELECT * FROM table3

)


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

INSERT [OVERWRITE] INTO table

VALUES [... | DEFAULT | NULL] ...


Catatan: BigQuery tidak mendukung penyisipan objek JSON dengan . pernyataan INSERT

INSERT [INTO] table (column1 [, ...])

VALUES (DEFAULT [, ...])

Catatan: BigQuery tidak mendukung alternatif langsung untuk OVERWRITE Snowflake. Sebagai gantinya, gunakan DELETE.

INSERT INTO table (column1 [, ...]) SELECT... FROM ...

INSERT [INTO] table (column1, [,...])

SELECT ...

FROM ...

INSERT [OVERWRITE] ALL <intoClause> ... INSERT [OVERWRITE] {FIRST | ALL} {WHEN condition THEN <intoClause>}

[...]

[ELSE <intoClause>]

...

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

UPDATE table SET col = value [,...] [FROM ...] [WHERE ...]

UPDATE table

SET column = expression [,...]

[FROM ...]

WHERE TRUE


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 contohDELETEBigQuery dalam dokumentasi DML.

Snowflake BigQuery

DELETE FROM table_name [USING ...]

[WHERE ...]



TRUNCATE [TABLE] [IF EXISTS] table_name

DELETE [FROM] table_name [alias]

WHERE ...


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

MERGE INTO target USING source ON target.key = source.key WHEN MATCHED AND source.filter = 'Filter_exp' THEN

UPDATE SET target.col1 = source.col1, target.col1 = source.col2,

...


Catatan: Snowflake mendukung parameter sesi ERROR_ON_NONDETERMINISTIC_MERGE untuk menangani hasil yang nondeterministik.

MERGE target

USING source

ON target.key = source.key

WHEN MATCHED AND source.filter = 'filter_exp' THEN

UPDATE SET

target.col1 = source.col1,

target.col2 = source.col2,

...



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

CREATE DATABASE <name>


Catatan: Snowflake memberikan persyaratan ini untuk penamaan database. Hanya memungkinkan 255 karakter untuk nama.

bq mk <name>


Catatan: BigQuery memiliki persyaratan penamaan set data yang serupa dengan Snowflake, tetapi BigQuery mengizinkan maksimum 1.024 karakter.

CREATE OR REPLACE DATABASE <name>

Mengganti set data tidak didukung di BigQuery.

CREATE TRANSIENT DATABASE <name>

Pembuatan set data sementara tidak didukung di BigQuery.

CREATE DATABASE IF NOT EXISTS <name>

Konsep tidak didukung di BigQuery

CREATE DATABASE <name>

CLONE <source_db>

[ { AT | BEFORE }

( { TIMESTAMP => <timestamp> |

OFFSET => <time_difference> |

STATEMENT => <id> } ) ]

Cloning set data belum didukung di BigQuery.

CREATE DATABASE <name>

DATA_RETENTION_TIME_IN_DAYS = <num>

Perjalanan waktu di level set data tidak didukung di BigQuery. Namun, perjalanan waktu untuk hasil kueri dan tabel didukung.

CREATE DATABASE <name>

DEFAULT_DDL_COLLATION = '<collation_specification>'

Collasi dalam DDL tidak didukung di BigQuery.

CREATE DATABASE <name>

COMMENT = '<string_literal>'

bq mk \

--description "<string_literal>" \

<name>

CREATE DATABASE <name>

FROM SHARE <provider_account>.<share_name>

Pembuatan set data bersama tidak didukung di BigQuery. Namun, pengguna dapat membagikan set data melalui Konsol/UI setelah set data dibuat.

CREATE DATABASE <name>

AS REPLICA OF

<region>.<account>.<primary_db_name>

AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }


Catatan: Snowflake menyediakan opsi untuk pemeliharaan latar belakang otomatis tampilan terwujud dalam database sekunder yang tidak didukung di BigQuery.

bq mk --transfer_config \

--target_dataset = <name> \

--data_source = cross_region_copy \ --params='

{"source_dataset_id":"<primary_db_name>"

,"source_project_id":"<project_id>"

,"overwrite_destination_table":"true"}'

Catatan: BigQuery mendukung pengsalinan set data menggunakan BigQuery Data Transfer Service. Lihat di sini untuk mengetahui prasyarat penyalinan set data.

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

ALTER DATABASE [ IF EXISTS ] <name> RENAME TO <new_db_name>

Penggantian nama set data tidak didukung di BigQuery, tetapi penyalinan set data didukung.

ALTER DATABASE <name>

SWAP WITH <target_db_name>

Pertukaran set data tidak didukung di BigQuery.

ALTER DATABASE <name>

SET

[DATA_RETENTION_TIME_IN_DAYS = <num>]

[ DEFAULT_DDL_COLLATION = '<value>']

Mengelola retensi dan pengumpulan data pada tingkat set data tidak didukung di BigQuery.

ALTER DATABASE <name>

SET COMMENT = '<string_literal>'

bq update \

--description "<string_literal>" <name>

ALTER DATABASE <name>

ENABLE REPLICATION TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]

Konsep tidak didukung di BigQuery.

ALTER DATABASE <name>

DISABLE REPLICATION [ TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]]

Konsep tidak didukung di BigQuery.

ALTER DATABASE <name>

SET AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }

Konsep tidak didukung di BigQuery.

ALTER DATABASE <name> REFRESH

Konsep tidak didukung di BigQuery.

ALTER DATABASE <name>

ENABLE FAILOVER TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]

Konsep tidak didukung di BigQuery.

ALTER DATABASE <name>

DISABLE FAILOVER [ TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]]

Konsep tidak didukung di BigQuery.

ALTER DATABASE <name>

PRIMARY

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

DROP DATABASE [ IF EXISTS ] <name>

[ CASCADE | RESTRICT ]


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.

bq rm -r -f -d <name>


Where

-r adalah untuk menghapus semua objek dalam set data

-f is to skip confirmation for execution

-d menunjukkan set data

Catatan: 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

SHOW DATABASES


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=prettyjson
and / or

bq show <dataset_name>


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.

SHOW TERSE DATABASES


Catatan: Dengan opsi TERSE, Snowflake hanya dapat menampilkan informasi/kolom tertentu tentang set data.
Konsep tidak didukung di BigQuery.

SHOW DATABASES HISTORY

Konsep perjalanan waktu tidak didukung di BigQuery pada level set data.
SHOW DATABASES

[LIKE '<pattern>']

[STARTS WITH '<name_string>']

Memfilter hasil menurut nama set data tidak didukung di BigQuery. Namun, pemfilteran menurut label didukung.
SHOW DATABASES

LIMIT <rows> [FROM '<name_string>']


Catatan: Secara default, Snowflake tidak membatasi jumlah hasil. Namun, nilai untuk LIMIT tidak boleh lebih dari 10 ribu.

bq ls \

--max_results <rows>


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

CREATE TABLE table_name

(

col1 data_type1 NOT NULL,

col2 data_type2 NULL,

col3 data_type3 UNIQUE,

col4 data_type4 PRIMARY KEY,

col5 data_type5

)


Catatan: Batasan UNIQUE dan PRIMARY KEY bersifat informatif dan tidak diterapkan oleh sistem Snowflake.

CREATE TABLE table_name

(

col1 data_type1 NOT NULL,

col2 data_type2,

col3 data_type3,

col4 data_type4,

col5 data_type5,

)

CREATE TABLE table_name

(

col1 data_type1[,...]

table_constraints

)


dengan table_constraints merupakan:

[UNIQUE(column_name [, ... ])]

[PRIMARY KEY(column_name [, ...])]

[FOREIGN KEY(column_name [, ...])

REFERENCES reftable [(refcolumn)]


Catatan: Batasan UNIQUE dan PRIMARY KEY bersifat informatif dan tidak diterapkan oleh sistem Snowflake.

CREATE TABLE table_name

(

col1 data_type1[,...]

)

PARTITION BY column_name

CLUSTER BY column_name [, ...]


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.

CREATE TABLE table_name

LIKE original_table_name

Lihat contoh ini untuk mempelajari cara menggunakan tabel INFORMATION_SCHEMA untuk menyalin nama kolom, jenis data, dan batasan NOT NULL ke tabel baru.

CREATE TABLE table_name

(

col1 data_type1

)

BACKUP NO


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.

CREATE TABLE table_name

(

col1 data_type1

)

table_attributes


dengan table_attributes merupakan:

[DISTSTYLE {AUTO|EVEN|KEY|ALL}]

[DISTKEY (column_name)]

[[COMPOUND|INTERLEAVED] SORTKEY

(column_name [, ...])]

BigQuery mendukung pengelompokan yang memungkinkan penyimpanan kunci dalam urutan yang diurutkan.

CREATE TABLE table_name

AS SELECT ...

CREATE TABLE table_name

AS SELECT ...

CREATE TABLE IF NOT EXISTS table_name

...

CREATE TABLE IF NOT EXISTS table_name

...

BigQuery juga mendukung pernyataan CREATE OR REPLACE TABLEpernyataan 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

ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (friendly_name="<new_name>")

ALTER TABLE <name>

SWAP WITH <target_db_name>

Pertukaran tabel tidak didukung di BigQuery.

ALTER TABLE <name>

SET

[DEFAULT_DDL_COLLATION = '<value>']

Mengelola pengumpulan data untuk tabel tidak didukung di BigQuery.

ALTER TABLE <name>

SET

[DATA_RETENTION_TIME_IN_DAYS = <num>]

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (expiration_timestamp=<timestamp>)

ALTER TABLE <name>

SET

COMMENT = '<string_literal>'

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (description='<string_literal>')

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

DROP TABLE [IF EXISTS] <table_name>

[CASCADE | RESTRICT]


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.

bq rm -r -f -d <dataset_name>.<table_name>


Where

-r adalah untuk menghapus semua objek dalam set data
-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.

UNDROP TABLE <table_name>

bq cp \ <dataset_name>.<table_name>@<unix_timestamp> <dataset_name>.<new_table_name>


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

table

((<col_name> <col_type> AS <expr> )

| (<part_col_name> <col_type> AS <part_expr>)[ inlineConstraint ]

[ , ... ] )

LOCATION = externalStage

FILE_FORMAT =

({FORMAT_NAME='<file_format_name>'

|TYPE=source_format [formatTypeOptions]})


Where:

externalStage = @[namespace.]ext_stage_name[/path]


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.

[1] bq mk \

--external_table_definition=definition_file \

dataset.table


OR


[2] bq mk \

--external_table_definition=schema_file@source_format={Cloud Storage URI | drive_URI} \

dataset.table


OR


[3] bq mk \

--external_table_definition=schema@source_format = {Cloud Storage URI | drive_URI} \

dataset.table


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.

CREATE [OR REPLACE] EXTERNAL TABLE [IF EXISTS]

<table_name>

((<col_name> <col_type> AS <expr> )

[ , ... ] )

[PARTITION BY (<identifier>, ...)]

LOCATION = externalStage

[REFRESH_ON_CREATE = {TRUE|FALSE}]

[AUTO_REFRESH = {TRUE|FALSE}]

[PATTERN = '<regex_pattern>']

FILE_FORMAT = ({FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET} [ formatTypeOptions]})

[COPY GRANTS]

[COMMENT = '<string_literal>']

bq mk \

--external_table_definition=definition_file \

dataset.table


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 VIEW view_name AS SELECT ...

CREATE VIEW view_name AS SELECT ...

CREATE OR REPLACE VIEW view_name AS SELECT ...

CREATE OR REPLACE VIEW

view_name AS SELECT ...

CREATE VIEW view_name

(column_name, ...)

AS SELECT ...

CREATE VIEW view_name

AS SELECT ...

Tidak didukung CREATE VIEW IF NOT EXISTS

view_name

OPTIONS(view_option_list)

AS SELECT ...

CREATE VIEW view_name

AS SELECT ...

WITH NO SCHEMA BINDING

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:

INSERT INTO dataset.table SELECT *, ROW_NUMBER() OVER () AS id FROM dataset.table

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

CREATE [ OR REPLACE ] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition

s

CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

AS sql_function_definition


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.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS TABLE (col_name, col_data_type[,..])

AS sql_function_definition


CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


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.

CREATE [SECURE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


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).

CREATE FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


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.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Catatan: Perilaku fungsi untuk input null secara implisit ditangani di BigQuery dan tidak perlu ditentukan sebagai opsi terpisah.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[VOLATILE | IMMUTABLE]

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


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

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS [' | $$]

sql_function_definition

[' | $$]

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Catatan: Penggunaan tanda kutip tunggal atau rangkaian karakter seperti kutipan dolar ($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[COMMENT = '<string_literal>']

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Note:Adding comments or descriptions in UDFs is currently not supported in BigQuery.

CREATE [OR REPLACE] FUNCTION function_name

(x integer, y integer)

RETURNS integer

AS $$

SELECT x + y

$$


Note: Snowflake does not support ANY TYPE for SQL UDFs. However, it supports using VARIANT data types.

CREATE [OR REPLACE] FUNCTION function_name

(x ANY TYPE, y ANY TYPE)

AS

SELECT x + y



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 EXISTSstatement which treats the query as successful and takes no action if a function with the same name already exists.

BigQuery's CREATE FUNCTIONstatement 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

DROP FUNCTION [IF EXISTS]

function_name

([arg_data_type, ... ])

DROP FUNCTION [IF EXISTS] dataset_name.function_name


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

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS procedure_definition;


Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_mode arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


arg_mode: IN | OUT | INOUT


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

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS

$$

javascript_code

$$;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

statement_list

END;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[{CALLED ON NULL INPUT | {RETURNS NULL ON NULL INPUT | STRICT}}]

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Catatan: Perilaku prosedur untuk input null secara implisit ditangani di BigQuery dan tidak perlu ditentukan sebagai opsi terpisah.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[VOLATILE | IMMUTABLE]

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Catatan:Ketidakstabilan prosedur bukanlah parameter yang dapat dikonfigurasi di BigQuery. Ini setara dengan volatilitas IMMUTABLE Snowflake.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[COMMENT = '<string_literal>']

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Catatan:Menambahkan komentar atau deskripsi dalam definisi prosedur saat ini tidak didukung di BigQuery.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[EXECUTE AS { CALLER | OWNER }]

AS procedure_definition;


Catatan: Snowflake mendukung penentuan pemanggil atau pemilik prosedur eksekusi

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


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

DROP PROCEDURE [IF EXISTS]

procedure_name

([arg_data_type, ... ])

DROP PROCEDURE [IF EXISTS] dataset_name.procedure_name


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

BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]; START_TRANSACTION [ name <name> ];

BigQuery selalu menggunakan Snapshot Isolation. Untuk mengetahui detailnya, lihat Jaminan konsistensi di bagian lain dalam dokumen ini.

COMMIT;

Tidak digunakan di BigQuery.

ROLLBACK;

Tidak digunakan di BigQuery.

SHOW LOCKS [ IN ACCOUNT ]; SHOW TRANSACTIONS [ IN ACCOUNT ]; Note: If the user has the ACCOUNTADMIN role, the user can see locks/transactions for all users in the account.

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