Panduan terjemahan Amazon Redshift SQL
Dokumen ini menjelaskan persamaan dan perbedaan sintaksis SQL antara Amazon Redshift dan BigQuery untuk membantu Anda merencanakan migrasi. Gunakan terjemahan SQL batch untuk memigrasikan skrip SQL secara massal, atau terjemahan SQL interaktif untuk menerjemahkan kueri ad hoc.
Audiens yang dituju untuk panduan ini adalah arsitek perusahaan, administrator database, developer aplikasi, dan spesialis keamanan IT. Anda dianggap sudah familier dengan Amazon Redshift.
Jenis data
Bagian ini menunjukkan padanan antara jenis data di Amazon Redshift dan di BigQuery.
Amazon Redshift | BigQuery | Catatan | |
---|---|---|---|
Data type | Alias | Data type | |
SMALLINT |
INT2 |
INT64 |
SMALLINT Amazon Redshift adalah 2 byte, sedangkan INT64 BigQuery adalah 8 byte. |
INTEGER |
INT64 |
INTEGER Amazon Redshift adalah 4 byte, sedangkan INT64 BigQuery adalah 8 byte. |
|
BIGINT |
INT8 |
INT64 |
BIGINT Amazon Redshift dan INT64 BigQuery sama-sama berukuran 8 byte. |
DECIMAL |
NUMERIC |
NUMERIC |
|
REAL |
FLOAT4 |
FLOAT64 |
REAL Amazon Redshift adalah 4 byte, sedangkan FLOAT64 BigQuery adalah 8 byte. |
DOUBLE
PRECISION |
FLOAT64 |
||
BOOLEAN |
BOOL |
BOOL |
BOOLEAN Amazon Redshift dapat menggunakan TRUE , t , true , y , yes , dan 1 sebagai nilai literal yang valid untuk true. Jenis data BOOL BigQuery menggunakan TRUE yang tidak peka huruf besar/kecil. |
CHAR |
STRING |
||
VARCHAR |
STRING |
||
DATE |
DATE |
||
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
DATETIME |
|
TIMESTAMPTZ |
TIMESTAMP |
Catatan: Di BigQuery, zona waktu digunakan saat mengurai stempel waktu atau memformat stempel waktu untuk ditampilkan. Stempel waktu berformat string mungkin menyertakan zona waktu, tetapi saat BigQuery mengurai string, stempel waktu tersebut akan menyimpan stempel waktu dalam waktu UTC yang setara. Jika zona waktu tidak ditentukan secara eksplisit, zona waktu default, yakni UTC, akan digunakan. Nama zona waktu atau offset dari UTC yang menggunakan (-|+)HH:MM didukung, tetapi singkatan zona waktu seperti PDT tidak didukung. | |
GEOMETRY |
GEOGRAPHY |
Dukungan untuk membuat kueri data geospasial. |
BigQuery juga memiliki jenis data berikut yang tidak memiliki analog Amazon Redshift langsung:
Jenis konversi implisit
Saat bermigrasi ke BigQuery, Anda harus mengonversi sebagian besar konversi implisit Amazon Redshift ke konversi eksplisit BigQuery kecuali untuk jenis data berikut, yang dikonversi oleh BigQuery secara implisit.
BigQuery melakukan konversi implisit untuk jenis data berikut:
Dari jenis BigQuery | Ke jenis BigQuery |
---|---|
|
|
|
|
|
|
BigQuery juga melakukan konversi implisit untuk literal berikut:
Dari jenis BigQuery | Ke jenis BigQuery |
---|---|
Literal STRING (misalnya "2008-12-25") |
|
Literal STRING (misalnya "2008-12-25 15:30:00") |
|
Literal STRING (misalnya "2008-12-25T07:30:00") |
|
Literal STRING (misalnya "15:30:00") |
|
Jenis konversi eksplisit
Anda dapat mengonversi jenis data Amazon Redshift yang tidak dikonversi secara implisit oleh BigQuery menggunakan fungsi CAST(expression AS type)
BigQuery atau salah satu fungsi konversi DATE
dan TIMESTAMP
.
Saat memigrasikan kueri, ubah kemunculan fungsi CONVERT(type, expression)
Amazon Redshift (atau sintaksis ::) ke fungsi CAST(expression AS type)
BigQuery, seperti yang ditunjukkan pada tabel di bagian Fungsi pemformatan jenis data.
Sintaksis kueri
Bagian ini membahas perbedaan sintaksis kueri antara Amazon Redshift dan BigQuery.
Pernyataan SELECT
Sebagian besar pernyataan SELECT
Amazon Redshift kompatibel dengan BigQuery. Tabel berikut berisi daftar perbedaan kecil.
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
BigQuery juga mendukung ekspresi berikut dalam pernyataan SELECT
, yang tidak memiliki padanan Amazon Redshift:
Klausa FROM
.
Klausa FROM
dalam kueri mencantumkan referensi tabel yang menjadi sumber pemilihan data. Di Amazon Redshift, referensi tabel yang mungkin digunakan mencakup tabel, tampilan, dan sub kueri. Semua referensi tabel ini didukung di BigQuery.
Tabel BigQuery dapat dirujuk dalam klausa FROM
menggunakan hal berikut:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery juga mendukung referensi tabel tambahan:
- Versi historis definisi dan baris tabel yang menggunakan
FOR SYSTEM_TIME AS OF
. - Jalur kolom, atau jalur apa pun yang me-resolve ke kolom dalam jenis data (seperti
STRUCT
). - Array yang diratakan.
Jenis JOIN
Amazon Redshift maupun BigQuery mendukung jenis join berikut:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
dan cross join koma implisit yang setara.
Tabel berikut berisi daftar perbedaan kecil.
Amazon Redshift | BigQuery |
---|---|
|
Catatan: Di BigQuery, JOIN memerlukan kondisi JOIN kecuali jika klausa adalah CROSS
JOIN atau salah satu tabel gabungan adalah kolom dalam suatu tipe data atau array. |
Klausa WITH
.
Klausa WITH
BigQuery berisi satu atau beberapa subkueri bernama yang dijalankan saat pernyataan SELECT
berikutnya mereferensikannya. Klausa WITH
Amazon Redshift berperilaku sama seperti klausa BigQuery dengan pengecualian bahwa Anda dapat mengevaluasi klausa satu kali dan menggunakan kembali hasilnya.
Operator set
Ada beberapa perbedaan kecil antara operator set Amazon Redshift dan operator set BigQuery. Namun, semua operasi set yang dapat dilakukan di Amazon Redshift dapat direplikasi di BigQuery.
Amazon Redshift | BigQuery |
---|---|
|
Catatan: BigQuery dan Amazon Redshift mendukung operator |
|
|
|
|
|
|
|
Catatan: BigQuery memerlukan tanda kurung untuk memisahkan operasi set yang berbeda. Jika operator set yang sama diulang, tanda kurung tidak diperlukan. |
Klausa ORDER BY
Ada beberapa perbedaan kecil antara klausa ORDER BY
Amazon Redshift dan klausa ORDER BY
BigQuery.
Amazon Redshift | BigQuery |
---|---|
Di Amazon Redshift, NULL diberi peringkat terakhir secara default (urutan menaik). |
Di BigQuery, NULL diberi peringkat pertama secara default (urutan menaik). |
|
Catatan: BigQuery tidak menggunakan sintaksis LIMIT ALL , tetapi ORDER BY mengurutkan semua baris secara default, sehingga menghasilkan perilaku yang sama dengan klausa LIMIT ALL Amazon Redshift. Sebaiknya sertakan klausa LIMIT dengan setiap klausa ORDER BY . Mengurutkan semua baris hasil akan menurunkan performa eksekusi kueri secara tidak perlu. |
|
Catatan: Di BigQuery, OFFSET harus digunakan bersama dengan jumlah LIMIT . Pastikan untuk menetapkan nilai INT64 jumlah ke jumlah baris minimum yang diperlukan.
Mengurutkan semua baris hasil akan menurunkan performa eksekusi kueri secara tidak perlu. |
Kondisi
Tabel berikut menunjukkan kondisi Amazon Redshift, atau predikat, yang spesifik untuk Amazon Redshift dan harus dikonversi ke kondisi BigQuery yang setara.
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
|
|
|
Catatan: BigQuery tidak mendukung karakter escape kustom. Anda harus menggunakan dua garis miring terbalik \\ sebagai karakter escape untuk BigQuery. |
|
Catatan: Jika NOT ditentukan, gabungkan ekspresi IF di atas dalam ekspresi NOT seperti yang ditunjukkan di bawah ini:
|
|
|
Fungsi
Bagian berikut mencantumkan fungsi Amazon Redshift dan fungsi BigQuery yang setara.
Fungsi agregat
Tabel berikut menunjukkan pemetaan antara agregat Amazon Redshift yang umum, analisis agregat, dan fungsi agregat perkiraan dengan BigQuery yang setara.
Amazon Redshift | BigQuery |
---|---|
APPROXIMATE
COUNT(DISTINCT expression) |
APPROX_COUNT_DISTINCT(expression) |
APPROXIMATE
PERCENTILE_DISC( |
APPROX_QUANTILES(expression,
100) |
AVG([DISTINCT] expression) |
AVG([DISTINCT] expression) |
COUNT(expression) |
COUNT(expression) |
LISTAGG( |
STRING_AGG( |
MAX(expression) |
MAX(expression) |
MEDIAN(median_expression) |
PERCENTILE_CONT( median_expression, 0.5
) OVER() |
MIN(expression) |
MIN(expression) |
PERCENTILE_CONT( |
PERCENTILE_CONT( Catatan: Tidak mencakup kasus penggunaan agregasi. |
STDDEV([DISTINCT] expression) |
STDDEV([DISTINCT] expression) |
STDDEV_SAMP([DISTINCT] expression) |
STDDEV_SAMP([DISTINCT] expression) |
STDDEV_POP([DISTINCT] expression) |
STDDEV_POP([DISTINCT] expression) |
SUM([DISTINCT] expression) |
SUM([DISTINCT] expression) |
VARIANCE([DISTINCT] expression) |
VARIANCE([DISTINCT] expression) |
VAR_SAMP([DISTINCT] expression) |
VAR_SAMP([DISTINCT] expression) |
VAR_POP([DISTINCT] expression) |
VAR_POP([DISTINCT] expression) |
BigQuery juga menawarkan fungsi agregat, analisis agregat, dan agregat perkiraan berikut, yang tidak memiliki analog langsung di Amazon Redshift:
ANY_VALUE
APPROX_TOP_COUNT
APPROX_TOP_SUM
ARRAY_AGG
ARRAY_CONCAT_AGG
COUNTIF
CORR
COVAR_POP
COVAR_SAMP
Fungsi agregat bitwise
Tabel berikut menunjukkan pemetaan antara fungsi agregat bitwise Amazon Redshift umum dengan BigQuery yang setara.
Amazon Redshift | BigQuery |
---|---|
BIT_AND(expression) |
BIT_ADD(expression) |
BIT_OR(expression) |
BIT_OR(expression) |
BOOL_AND>(expression) |
LOGICAL_AND(expression) |
BOOL_OR(expression) |
LOGICAL_OR(expression) |
BigQuery juga menawarkan fungsi agregat bit-wise berikut, yang tidak memiliki analog langsung di Amazon Redshift:
Fungsi jendela
Tabel berikut menunjukkan pemetaan antara fungsi jendela Amazon Redshift umum dengan BigQuery yang setara. Fungsi windowing di BigQuery mencakup fungsi agregat analisis, fungsi agregat, fungsi navigasi, dan fungsi penomoran.
Amazon Redshift | BigQuery |
---|---|
AVG(expression) OVER |
AVG(expression) OVER |
COUNT(expression) OVER |
COUNT(expression) OVER |
CUME_DIST() OVER |
CUME_DIST() OVER |
DENSE_RANK() OVER |
DENSE_RANK() OVER |
FIRST_VALUE(expression)
OVER |
FIRST_VALUE(expression)
OVER |
LAST_VALUE(expression) OVER |
LAST_VALUE(expression) OVER |
LAG(value_expr [, offset])
OVER |
LAG(value_expr [, offset])
OVER |
LEAD(value_expr [, offset])
OVER |
LEAD(value_expr [, offset])
OVER |
LISTAGG( |
STRING_AGG( |
MAX(expression) OVER |
MAX(expression) OVER |
MEDIAN(median_expression)
OVER |
PERCENTILE_CONT( |
MIN(expression) OVER |
MIN(expression) OVER |
NTH_VALUE(expression,
offset) OVER (
[PARTITION BY window_partition] [ORDER BY window_ordering
frame_clause]
) |
NTH_VALUE(expression,
offset) OVER |
NTILE(expr) OVER |
NTILE(expr) OVER |
PERCENT_RANK() OVER |
PERCENT_RANK() OVER |
PERCENTILE_CONT(percentile)
|
PERCENTILE_CONT(expr,
percentile) OVER |
PERCENTILE_DISC(percentile)
WITHIN GROUP (ORDER BY expr) OVER |
PERCENTILE_DISC(expr,
percentile) OVER |
RANK() OVER |
RANK() OVER |
RATIO_TO_REPORT(ratio_expression)
OVER |
ratio_expression SUM(ratio_expression) OVER |
ROW_NUMBER() OVER |
ROW_NUMBER() OVER |
STDDEV(expression) OVER |
STDDEV(expression) OVER |
STDDEV_SAMP(expression)
OVER |
STDDEV_SAMP(expression)
OVER |
STDDEV_POP(expression) OVER |
STDDEV_POP(expression) OVER |
SUM(expression) OVER |
SUM(expression) OVER |
VAR_POP(expression) OVER |
VAR_POP(expression) OVER |
VAR_SAMP(expression) OVER |
VAR_SAMP(expression) OVER |
VARIANCE(expression) OVER |
VARIANCE(expression) OVER |
Ekspresi bersyarat
Tabel berikut menunjukkan pemetaan antara ekspresi kondisional Amazon Redshift yang umum dengan BigQuery yang setara.
Amazon Redshift | BigQuery |
---|---|
CASEexpression |
CASE expression |
COALESCE(expression1[,
...]) |
COALESCE(expression1[,
...]) |
DECODE( |
CASE expression |
GREATEST(value [,
...]) |
GREATEST(value [,
...]) |
LEAST(value [, ...]) |
LEAST(value [, ...]) |
NVL(expression1[, ...])
|
COALESCE(expression1[,
...]) |
NVL2( |
IF( |
NULLIF(expression1,
expression2) |
NULLIF(expression1,
expression2) |
BigQuery juga menawarkan ekspresi kondisional berikut, yang tidak memiliki analog langsung di Amazon Redshift:
Fungsi tanggal dan waktu
Tabel berikut menunjukkan pemetaan antara fungsi tanggal dan waktu Amazon Redshift yang umum dengan BigQuery yang setara. Fungsi tanggal dan waktu BigQuery mencakup fungsi tanggal, datetime datetime, fungsi waktu, dan fungsi stempel waktu.
Perlu diingat bahwa fungsi yang tampak identik di Amazon Redshift dan BigQuery dapat menampilkan jenis data yang berbeda.
Amazon Redshift | BigQuery |
---|---|
ADD_MONTHS( |
CAST( DATE_ADD( |
timestamptz_or_timestamp AT TIME
ZONE timezone |
PARSE_TIMESTAMP( Catatan: Zona waktu digunakan saat mengurai stempel waktu atau memformat stempel waktu untuk ditampilkan. Stempel waktu berformat string mungkin menyertakan zona waktu, tetapi saat BigQuery mengurai string, stempel waktu tersebut akan menyimpan stempel waktu dalam waktu UTC yang setara. Jika zona waktu tidak ditentukan secara eksplisit, zona waktu default, yakni UTC, akan digunakan. Nama zona waktu atau offset dari UTC (-HH:MM) didukung, tetapi singkatan zona waktu (seperti PDT) tidak didukung. |
CONVERT_TIMEZONE( |
PARSE_TIMESTAMP( Catatan: source_timezone adalah UTC di BigQuery. |
CURRENT_DATE Catatan: Menampilkan tanggal mulai untuk transaksi saat ini dalam zona waktu sesi saat ini (UTC secara default). |
CURRENT_DATE() Catatan: Menampilkan tanggal mulai untuk pernyataan saat ini dalam zona waktu UTC. |
DATE_CMP(date1, date2)
|
CASE |
DATE_CMP_TIMESTAMP(date1,
date2) |
CASE |
DATE_CMP_TIMESTAMPTZ(date,
timestamptz) |
CASE |
DATE_PART_YEAR(date) |
EXTRACT(YEAR FROM
date) |
DATEADD(date_part,
interval, date) |
CAST( |
DATEDIFF( |
DATE_DIFF( |
DATE_PART(date_part, date)
|
EXTRACT(date_part FROM
date) |
DATE_TRUNC('date_part',
timestamp) |
TIMESTAMP_TRUNC(timestamp,
date_part) |
EXTRACT(date_part FROM
timestamp) |
EXTRACT(date_part FROM
timestamp) |
GETDATE() |
PARSE_TIMESTAMP( |
INTERVAL_CMP( |
Untuk interval dalam Redshift, ada 360 hari dalam setahun.
Di BigQuery, Anda dapat menggunakan fungsi yang ditentukan pengguna (UDF) berikut untuk mengurai interval Redshift dan menerjemahkannya ke detik. CREATE TEMP FUNCTION Untuk membandingkan literal interval, lakukan: IF( |
LAST_DAY(date) |
DATE_SUB( |
MONTHS_BETWEEN( |
DATE_DIFF( |
NEXT_DAY(date, day) |
DATE_ADD( |
SYSDATE Catatan: Menampilkan stempel waktu mulai untuk transaksi saat ini dalam zona waktu sesi saat ini (UTC secara default). |
CURRENT_TIMESTAMP() Catatan: Menampilkan stempel waktu mulai untuk pernyataan saat ini dalam zona waktu UTC. |
TIMEOFDAY() |
FORMAT_TIMESTAMP( |
TIMESTAMP_CMP( |
CASE |
TIMESTAMP_CMP_DATE( |
CASE |
TIMESTAMP_CMP_TIMESTAMPTZ(
Catatan: Redshift membandingkan stempel waktu di zona waktu yang ditentukan sesi pengguna. Zona waktu sesi pengguna default adalah UTC. |
CASE Catatan: BigQuery membandingkan stempel waktu dalam zona waktu UTC. |
TIMESTAMPTZ_CMP( Catatan: Redshift membandingkan stempel waktu di zona waktu yang ditentukan sesi pengguna. Zona waktu sesi pengguna default adalah UTC. |
CASE Catatan: BigQuery membandingkan stempel waktu dalam zona waktu UTC. |
TIMESTAMPTZ_CMP_DATE( Catatan: Redshift membandingkan stempel waktu di zona waktu yang ditentukan sesi pengguna. Zona waktu sesi pengguna default adalah UTC. |
CASE Catatan: BigQuery membandingkan stempel waktu dalam zona waktu UTC. |
TIMESTAMPTZ_CMP_TIMESTAMP(
Catatan: Redshift membandingkan stempel waktu di zona waktu yang ditentukan sesi pengguna. Zona waktu sesi pengguna default adalah UTC. |
CASE Catatan: BigQuery membandingkan stempel waktu dalam zona waktu UTC. |
TIMEZONE( |
PARSE_TIMESTAMP( Catatan: Zona waktu digunakan saat mengurai stempel waktu atau memformat stempel waktu untuk ditampilkan. Stempel waktu berformat string mungkin menyertakan zona waktu, tetapi saat BigQuery mengurai string, stempel waktu tersebut akan menyimpan stempel waktu dalam waktu UTC yang setara. Jika zona waktu tidak ditentukan secara eksplisit, zona waktu default, yakni UTC, akan digunakan. Nama zona waktu atau offset dari UTC (-HH:MM) didukung, tetapi singkatan zona waktu (seperti PDT) tidak didukung. |
TO_TIMESTAMP(timestamp,
format) |
PARSE_TIMESTAMP( Catatan: BigQuery mengikuti kumpulan elemen format yang berbeda. Zona waktu digunakan saat mengurai stempel waktu atau memformat stempel waktu untuk ditampilkan. Stempel waktu berformat string mungkin menyertakan zona waktu, tetapi saat BigQuery mengurai string, stempel waktu tersebut akan menyimpan stempel waktu dalam waktu UTC yang setara. Jika zona waktu tidak ditentukan secara eksplisit, zona waktu default, yakni UTC, akan digunakan. Nama zona waktu atau offset dari UTC (-HH:MM) didukung dalam string format, tetapi singkatan zona waktu (seperti PDT) tidak didukung. |
TRUNC(timestamp) |
CAST(timestamp AS
DATE) |
BigQuery juga menawarkan fungsi tanggal dan waktu berikut, yang tidak memiliki analog langsung di Amazon Redshift:
EXTRACT
DATE
DATE_SUB
DATE_ADD
(menampilkan jenis dataDATE
)DATE_FROM_UNIX_DATE
FORMAT_DATE
PARSE_DATE
UNIX_DATE
DATETIME
DATETIME_ADD
DATETIME_SUB
DATETIME_DIFF
DATETIME_TRUNC
FORMAT_DATETIME
PARSE_DATETIME
CURRENT_TIME
TIME
TIME_ADD
TIME_SUB
TIME_DIFF
TIME_TRUNC
FORMAT_TIME
PARSE_TIME
TIMESTAMP_SECONDS
TIMESTAMP_MILLIS
TIMESTAMP_MICROS
UNIX_SECONDS
UNIX_MILLIS
UNIX_MICROS
Operator matematis
Tabel berikut menunjukkan pemetaan antara operator matematis Amazon Redshift yang umum dengan BigQuery yang setara.
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
|
|
Catatan: Jika operator melakukan pembagian bilangan bulat (dengan kata lain, jika X dan Y adalah bilangan bulat), sebuah bilangan bulat akan ditampilkan. Jika operator melakukan pembagian non-bilangan bulat, non-bilangan bulat akan ditampilkan. |
Jika pembagian bilangan bulat: CAST(FLOOR(X / Y) AS INT64)
Jika bukan pembagian bilangan bulat:
Catatan: Pembagian di BigQuery menampilkan non-bilangan bulat. Untuk mencegah error dari operasi pembagian (error pembagian dengan nol), gunakan SAFE_DIVIDE(X, Y) atau IEEE_DIVIDE(X, Y) . |
|
Catatan: Untuk mencegah error dari operasi pembagian (error pembagian dengan nol), gunakan SAFE.MOD(X, Y) . SAFE.MOD(X, 0) menghasilkan 0. |
|
Catatan: Tidak seperti Amazon Redshift, operator ^ di BigQuery menjalankan Bitwise xor. |
|
Catatan: Untuk mencegah error dari operasi akar kuadrat (input negatif), gunakan SAFE.SQRT(X) . Input negatif dengan SAFE.SQRT(X) menghasilkan NULL . |
|
Catatan: POWER(X, Y) BigQuery menampilkan error jika X adalah nilai terbatas yang kurang dari 0 dan Y adalah nonbilangan bulat. |
|
|
|
Catatan: Operator ini menampilkan 0 atau urutan byte b'\x00' jika Y operand kedua lebih besar dari atau sama dengan panjang bit X operand pertama (misalnya, 64 jika X memiliki jenis INT64). Operator ini menampilkan error jika Y negatif. |
|
Catatan: Menggeser X operand pertama ke kanan. Operator ini tidak melakukan ekstensi bit tanda dengan jenis bertanda (operator mengisi bit kosong di sebelah kiri dengan 0). Operator ini menampilkan 0 atau urutan byte b'\x00' jika Y operand kedua lebih besar dari atau sama dengan panjang bit X operand pertama (misalnya, 64 jika X memiliki jenis INT64). Operator ini menampilkan error jika Y negatif. |
|
|
|
|
|
|
BigQuery juga menawarkan operator matematis berikut, yang tidak memiliki analog langsung di Amazon Redshift:
X ^ Y
(Bitwise xor)
Fungsi matematika
Amazon Redshift | BigQuery |
---|---|
ABS(number) |
ABS(number) |
ACOS(number) |
ACOS(number) |
ASIN(number) |
ASIN(number) |
ATAN(number) |
ATAN(number) |
ATAN2(number1,
number2) |
ATAN2(number1,
number2) |
CBRT(number) |
POWER(number, 1/3) |
CEIL(number) |
CEIL(number) |
CEILING(number) |
CEILING(number) |
CHECKSUM(expression) |
FARM_FINGERPRINT(expression)
|
COS(number) |
COS(number) |
COT(number) |
1/TAN(number) |
DEGREES(number) |
number *180/ACOS(-1) |
DEXP(number) |
EXP(number) |
DLOG1(number) |
LN(number) |
DLOG10(number) |
LOG10(number) |
EXP(number) |
EXP(number) |
FLOOR(number) |
FLOOR(number) |
LNnumber) |
LN(number) |
LOG(number) |
LOG10(number) |
MOD(number1, number2) |
MOD(number1, number2) |
PI |
ACOS(-1) |
POWER(expression1,
expression2) |
POWER(expression1,
expression2) |
RADIANS(number) |
ACOS(-1)*(number/180) |
RANDOM() |
RAND() |
ROUND(number [,
integer]) |
ROUND(number [,
integer]) |
SIN(number) |
SIN(number) |
SIGN(number) |
SIGN(number) |
SQRT(number) |
SQRT(number) |
TAN(number) |
TAN(number) |
TO_HEX(number) |
FORMAT('%x', number) |
TRUNC(number [,
integer])+-+++ |
TRUNC(number [, integer])
|
Fungsi string
Amazon Redshift | BigQuery |
---|---|
string1 || string2 |
CONCAT(string1,
string2) |
BPCHARCMP(string1,
string2) |
CASE |
BTRIM(string [,
matching_string]) |
TRIM(string [,
matching_string]) |
BTTEXT_PATTERN_CMP(string1,
string2) |
CASE |
CHAR_LENGTH(expression) |
CHAR_LENGTH(expression) |
CHARACTER_LENGTH(expression) |
CHARACTER_LENGTH(expression) |
CHARINDEX(substring,
string) |
STRPOS(string, substring)
|
CHR(number) |
CODE_POINTS_TO_STRING([number])
|
CONCAT(string1,
string2) |
CONCAT(string1,
string2) Catatan: CONCAT (...) BigQuery mendukung menyambungkan string dalam jumlah berapa pun. |
CRC32 |
Fungsi kustom yang ditentukan pengguna |
FUNC_SHA1(string) |
SHA1(string) |
INITCAP |
INITCAP |
LEFT(string, integer) |
SUBSTR(string, 0, integer)
|
RIGHT(string, integer)
|
SUBSTR(string,
-integer) |
LEN(expression) |
LENGTH(expression) |
LENGTH(expression) |
LENGTH(expression) |
LOWER(string) |
LOWER(string) |
LPAD(string1, length[,
string2]) |
LPAD(string1, length[,
string2]) |
RPAD(string1, length[,
string2]) |
RPAD(string1, length[,
string2]) |
LTRIM(string,
trim_chars) |
LTRIM(string,
trim_chars) |
MD5(string) |
MD5(string) |
OCTET_LENGTH(expression) |
BYTE_LENGTH(expression) |
POSITION(substring IN
string) |
STRPOS(string,
substring) |
QUOTE_IDENT(string) |
CONCAT('"',string,'"') |
QUOTE_LITERAL(string) |
CONCAT("'",string,"'")
|
REGEXP_COUNT(
source_string, pattern |
ARRAY_LENGTH( REGEXP_EXTRACT_ALL( Jika position ditentukan: ARRAY_LENGTH( REGEXP_EXTRACT_ALL( Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2 ; lihat dokumentasi untuk sintaksis ekspresi regulernya. |
REGEXP_INSTR( |
IFNULL( STRPOS( Jika source_string ditentukan: REGEXP_REPLACE( Jika position ditentukan:IFNULL( STRPOS( Jika occurrence ditentukan:IFNULL( STRPOS( Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2 ;
lihat dokumentasi itu untuk sintaksis ekspresi regulernya. |
REGEXP_REPLACE(
source_string, |
REGEXP_REPLACE( Jika source_string ditentukan:
REGEXP_REPLACE( Jika position ditentukan:CASE |
REGEXP_SUBSTR(
source_string, pattern |
REGEXP_EXTRACT( Jika position ditentukan:REGEXP_EXTRACT( Jika occurrence ditentukan:REGEXP_EXTRACT_ALL( Catatan: BigQuery menyediakan dukungan ekspresi reguler menggunakan library re2 ; lihat dokumentasi itu untuk sintaksis ekspresi regulernya.
|
REPEAT(string,
integer) |
REPEAT(string,
integer) |
REPLACE(string, old_chars,
new_chars) |
REPLACE(string, old_chars,
new_chars) |
REPLICA(string,
integer) |
REPEAT(string,
integer) |
REVERSE(expression) |
REVERSE(expression) |
RTRIM(string,
trim_chars) |
RTRIM(string,
trim_chars) |
SPLIT_PART(string,
delimiter, part) |
SPLIT( |
STRPOS(string,
substring) |
STRPOS(string,
substring) |
STRTOL(string, base) |
|
SUBSTRING( |
SUBSTR( |
TEXTLEN(expression) |
LENGTH(expression) |
TRANSLATE( |
Dapat diimplementasikan menggunakan UDF: CREATE TEMP FUNCTION |
TRIM([BOTH] string) |
TRIM(string) |
TRIM([BOTH] characters FROM
string) |
TRIM(string, characters)
|
UPPER(string) |
UPPER(string) |
Fungsi pemformatan jenis data
Amazon Redshift | BigQuery |
---|---|
CAST(expression AS type) |
CAST(expression AS type) |
expression ::
type |
CAST(expression AS type) |
CONVERT(type, expression) |
CAST(expression AS type) |
TO_CHAR(
|
FORMAT_TIMESTAMP( Catatan: BigQuery dan Amazon Redshift berbeda dalam cara menentukan string format untuk timestamp_expression . |
TO_CHAR(
|
FORMAT( Catatan: BigQuery dan Amazon Redshift berbeda dalam cara menentukan string format untuk timestamp_expression .
|
TO_DATE(date_string, format) |
PARSE_DATE(date_string, format)
Catatan: BigQuery dan Amazon Redshift berbeda dalam cara menentukan string format untuk date_string . |
TO_NUMBER(string, format) |
CAST( Catatan: BigQuery dan Amazon Redshift berbeda dalam cara menentukan string format numerik. |
BigQuery juga mendukung SAFE_CAST
(expression
AS typename)
, yang menampilkan NULL
jika BigQuery tidak dapat melakukan cast; misalnya, SAFE_CAST
("apple"
AS INT64)
menampilkan NULL
.
Sintaksis DML
Bagian ini membahas perbedaan sintaksis bahasa pengelolaan data antara Amazon Redshift dan BigQuery.
Pernyataan INSERT
Amazon Redshift 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
Amazon Redshift kompatibel dengan BigQuery. Tabel berikut menunjukkan pengecualian.
Amazon Redshift | BigQuery |
---|---|
INSERT INTO table (column1 [, ...]) |
INSERT [INTO] table (column1 [, ...]) |
INSERT INTO table (column1, [,...]) VALUES ( |
INSERT [INTO] table (column1, [,...]) |
BigQuery juga mendukung penyisipan nilai menggunakan subkueri (dengan salah satu nilai dihitung menggunakan subkueri), yang tidak didukung di Amazon Redshift. Misalnya:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
Pernyataan COPY
Perintah COPY
Amazon Redshift memuat data ke dalam tabel dari file data atau dari tabel Amazon DynamoDB.
BigQuery tidak menggunakan perintah SQL COPY
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
Amazon Redshift kompatibel dengan BigQuery. Tabel berikut menunjukkan pengecualian.
Amazon Redshift | BigQuery |
---|---|
UPDATE table |
UPDATE table Catatan: Semua pernyataan UPDATE di BigQuery memerlukan kata kunci WHERE , yang diikuti dengan kondisi. |
UPDATE table |
UPDATE table Catatan: Perintah UPDATE BigQuery tidak mendukung nilai DEFAULT .
Jika pernyataan UPDATE Amazon Redshift tidak menyertakan klausa WHERE , pernyataan UPDATE BigQuery harus dikondisikan WHERE TRUE . |
Pernyataan DELETE
dan TRUNCATE
Pernyataan DELETE
dan TRUNCATE
adalah cara untuk menghapus baris dari tabel tanpa memengaruhi skema atau indeks tabel.
Di Amazon Redshift, pernyataan TRUNCATE
direkomendasikan daripada pernyataan DELETE
yang tidak memenuhi syarat karena lebih cepat dan tidak memerlukan operasi VACUUM
dan ANALYZE
setelahnya.
Namun, Anda dapat menggunakan pernyataan DELETE
untuk mencapai efek yang sama.
Di BigQuery, pernyataan DELETE
harus memiliki klausa WHERE
. Untuk mengetahui informasi selengkapnya tentang DELETE
di BigQuery, lihat contoh DELETE
BigQuery dalam dokumentasi DML.
Amazon Redshift | BigQuery |
---|---|
DELETE
[FROM] table_name TRUNCATE
[TABLE] table_name |
DELETE FROM table_name Pernyataan DELETE BigQuery memerlukan klausa WHERE . |
DELETE FROM table_name |
DELETE FROM table_name DELETE FROM table_name Di Amazon Redshift, USING memungkinkan tabel tambahan untuk direferensikan dalam klausa WHERE . Hal ini dapat dilakukan di BigQuery menggunakan subkueri dalam klausa WHERE . |
Pernyataan MERGE
Pernyataan MERGE
dapat menggabungkan operasi INSERT
, UPDATE
, dan DELETE
menjadi satu pernyataan upsert dan menjalankan operasi secara atomik. Operasi MERGE
harus cocok dengan maksimal satu baris sumber untuk setiap baris target.
Amazon Redshift tidak mendukung satu perintah MERGE
. Namun, operasi penggabungan dapat dilakukan di Amazon Redshift dengan melakukan operasi INSERT
, UPDATE
, dan DELETE
dalam transaksi.
Menggabungkan operasi dengan mengganti baris yang ada
Di Amazon Redshift, penimpaan semua kolom dalam tabel target dapat dilakukan menggunakan pernyataan DELETE
, lalu pernyataan INSERT
. Pernyataan DELETE
menghapus baris yang harus diperbarui, lalu pernyataan INSERT
menyisipkan baris yang telah diperbarui. Tabel BigQuery dibatasi hingga 1.000 pernyataan DML per hari. Oleh karena itu, Anda harus menggabungkan pernyataan INSERT
, UPDATE
, dan DELETE
ke dalam satu pernyataan MERGE
seperti yang ditampilkan di tabel berikut.
Amazon Redshift | BigQuery |
---|---|
Lihat Melakukan operasi penggabungan dengan mengganti baris yang ada. CREATE TEMP TABLE temp_table; |
MERGE target Catatan: Semua kolom harus tercantum jika semua kolom diperbarui. |
Lihat Melakukan operasi penggabungan dengan menentukan daftar kolom. CREATE TEMP TABLE temp_table; |
MERGE target |
Sintaksis DDL
Bagian ini membahas perbedaan dalam sintaksis bahasa definisi data antara Amazon Redshift dan BigQuery.
Pernyataan SELECT INTO
Di Amazon Redshift, pernyataan SELECT INTO
dapat digunakan untuk menyisipkan hasil kueri ke dalam tabel baru, yang menggabungkan pembuatan dan penyisipan tabel.
Amazon Redshift | BigQuery |
---|---|
SELECT expression, ... INTO table |
INSERT table |
WITH subquery_table AS ( SELECT ... |
INSERT table |
SELECT expression |
BigQuery menawarkan beberapa cara untuk mengemulasikan tabel sementara. Lihat bagian tabel sementara untuk informasi selengkapnya. |
Pernyataan CREATE TABLE
Sebagian besar pernyataan CREATE TABLE
Amazon Redshift kompatibel dengan BigQuery, kecuali untuk elemen sintaksis berikut, yang tidak digunakan di BigQuery:
Amazon Redshift | BigQuery |
---|---|
CREATE TABLE table_name ( Catatan: Batasan UNIQUE dan PRIMARY KEY bersifat informatif dan tidak diterapkan oleh sistem Amazon Redshift. |
CREATE TABLE table_name ( |
CREATE TABLE table_name Catatan: Batasan UNIQUE dan PRIMARY KEY bersifat informatif dan tidak diterapkan oleh sistem Amazon Redshift.
|
CREATE TABLE table_name Catatan: BigQuery tidak menggunakan batasan tabel UNIQUE , PRIMARY KEY , atau FOREIGN KEY . Untuk mencapai pengoptimalan serupa yang disediakan batasan ini selama eksekusi kueri, buat partisi dan cluster tabel BigQuery Anda. CLUSTER BY mendukung hingga 4 kolom. |
CREATE TABLE 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 Catatan: Di Amazon Redshift, setelan BACKUP
NO ditentukan untuk menghemat waktu pemrosesan dan 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 |
BigQuery mendukung pengelompokan, yang memungkinkan penyimpanan kunci dalam pengurutan. |
CREATE TABLE table_name |
CREATE TABLE table_name |
CREATE TABLE IF NOT EXISTS table_name ... |
CREATE TABLE IF NOT EXISTS |
BigQuery juga mendukung pernyataan DDL CREATE OR REPLACE TABLE
, yang menimpa tabel jika sudah ada.
Pernyataan CREATE TABLE
BigQuery juga mendukung klausa berikut, yang tidak memiliki padanan di Amazon Redshift:
Untuk mengetahui informasi selengkapnya tentang CREATE TABLE
di BigQuery, lihat contoh CREATE TABLE
BigQuery dalam dokumentasi DML.
Tabel sementara
Amazon Redshift mendukung tabel sementara, yang hanya terlihat dalam sesi saat ini. Ada beberapa cara untuk mengemulasi tabel sementara di BigQuery:
- TTL set data: Membuat set data yang memiliki time to live (TTL) singkat (misalnya, satu jam) sehingga tabel apa pun yang dibuat dalam set data tersebut bersifat sementara karena tidak akan bertahan lebih lama daripada time to live set data. Anda dapat memberikan awalan untuk semua nama tabel dalam set data ini dengan temp untuk menunjukkan dengan jelas bahwa tabel tersebut bersifat sementara.
Tabel TTL: Membuat tabel yang memiliki time to live (TTL) singkat khusus tabel menggunakan pernyataan DDL yang mirip dengan berikut ini:
CREATE TABLE temp.name (col1, col2, ...) OPTIONS (expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));
Pernyataan CREATE VIEW
Tabel berikut menunjukkan padanan antara Amazon Redshift dan BigQuery untuk pernyataan CREATE VIEW
.
Amazon Redshift | BigQuery |
---|---|
CREATE VIEW view_name AS SELECT ... code> |
CREATE VIEW view_name AS SELECT
... |
CREATE OR REPLACE VIEW view_name AS SELECT ... |
CREATE OR REPLACE VIEW |
CREATE VIEW view_name |
CREATE VIEW view_name AS SELECT
... |
Tidak didukung. | CREATE VIEW IF NOT EXISTS c
view_name Membuat tampilan baru hanya jika tampilan tidak ada dalam set data yang ditentukan. |
CREATE VIEW view_name Di Amazon Redshift, tampilan binding terlambat diperlukan untuk mereferensikan tabel eksternal. |
Di BigQuery, untuk membuat tampilan, semua objek yang direferensikan harus sudah ada. BigQuery memungkinkan Anda menjalankan kueri terhadap sumber data eksternal. |
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.
Amazon Redshift maupun BigQuery mendukung UDF menggunakan ekspresi SQL. Selain itu, di Amazon Redshift, Anda dapat membuat UDF berbasis Python, dan di BigQuery Anda dapat membuat UDF berbasis JavaScript.
Lihat repositori GitHub utilitas Google Cloud BigQuery untuk library UDF BigQuery umum.
Sintaksis CREATE FUNCTION
Tabel berikut membahas perbedaan sintaksis pembuatan UDF SQL antara Amazon Redshift dan BigQuery.
Amazon Redshift | BigQuery |
---|---|
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION Catatan: Di SQL UDF BigQuery, jenis data yang ditampilkan bersifat opsional. BigQuery menyimpulkan jenis hasil fungsi dari isi fungsi SQL saat kueri memanggil fungsi. |
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION Catatan: Volatilitas fungsi bukanlah parameter yang dapat dikonfigurasi di BigQuery. Semua volatilitas UDF BigQuery setara dengan volatilitas IMMUTABLE Amazon Redshift (artinya, tidak melakukan pencarian database atau menggunakan informasi yang tidak langsung ada dalam daftar argumennya).
|
CREATE [OR
REPLACE] FUNCTION Catatan: Amazon Redshift hanya mendukung klausa SQL SELECT sebagai definisi fungsi. Selain itu, klausa SELECT tidak boleh menyertakan klausa FROM,
INTO, WHERE, GROUP BY, ORDER BY, dan LIMIT . |
CREATE [OR REPLACE] FUNCTION Catatan: BigQuery mendukung ekspresi SQL apa pun sebagai definisi fungsi. Namun, mereferensikan tabel, tampilan, atau model tidak didukung. |
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION
function_name ([sql_arg_name sql_arg_data_type[,..]]) RETURNS
data_type AS sql_function_definition Catatan: Literal bahasa tidak perlu ditentukan dalam UDF GoogleSQL. BigQuery menafsirkan ekspresi SQL secara default. Selain itu, kutipan dolar Amazon Redshift ( $$ ) tidak didukung di BigQuery. |
CREATE [OR
REPLACE] FUNCTION function_name (integer, integer) RETURNS
integer IMMUTABLE AS $$ SELECT $1 + $2 $$ LANGUAGE sql |
CREATE [OR REPLACE] FUNCTION Catatan: UDF BigQuery mengharuskan semua argumen input diberi nama. Variabel argumen Amazon Redshift ( $1 , $2 , …) tidak didukung di BigQuery. |
CREATE [OR
REPLACE] FUNCTION Catatan: Amazon Redshift tidak mendukung ANY TYPE untuk UDF SQL. Namun, Amazon Redshift mendukung penggunaan jenis data ANYELEMENT dalam UDF berbasis Python. |
CREATE [OR REPLACE] FUNCTION Catatan: BigQuery mendukung penggunaan ANY TYPE sebagai jenis argumen. Fungsi ini menerima input jenis apa pun untuk argumen ini. Untuk mengetahui informasi selengkapnya, lihat parameter dengan template di BigQuery.
|
BigQuery juga mendukung pernyataan CREATE FUNCTION IF NOT EXISTS
, yang memperlakukan kueri sebagai sukses dan tidak mengambil tindakan jika fungsi dengan nama yang sama sudah ada.
Pernyataan CREATE FUNCTION
BigQuery juga mendukung pembuatan fungsi TEMPORARY
atau TEMP
, yang tidak memiliki fungsi pada Amazon Redshift yang setara.
Lihat memanggil UDF untuk mengetahui detail tentang cara menjalankan persistent UDF BigQuery.
Sintaksis DROP FUNCTION
Tabel berikut membahas perbedaan sintaksis DROP FUNCTION
antara Amazon Redshift dan BigQuery.
Amazon Redshift | BigQuery |
---|---|
DROP
FUNCTION |
DROP FUNCTION Catatan: BigQuery tidak perlu menggunakan tanda tangan fungsi untuk menghapus fungsi. Selain itu, menghapus dependensi fungsi tidak didukung di BigQuery. |
BigQuery juga mendukung pernyataan DROP FUNCTION IF EXISTS
, yang akan menghapus fungsi hanya jika fungsi tersebut ada dalam set data yang ditentukan.
BigQuery mengharuskan Anda menentukan project_name jika fungsi tersebut tidak berada dalam project saat ini.
Komponen UDF
Bagian ini menyoroti persamaan dan perbedaan komponen UDF antara Amazon Redshift dan BigQuery.
Komponen | Amazon Redshift | BigQuery |
---|---|---|
Nama | Amazon Redshift menyarankan penggunaan awalan _f untuk nama fungsi agar tidak terjadi konflik dengan nama fungsi SQL bawaan yang sudah ada atau yang akan datang. |
Di BigQuery, Anda dapat menggunakan nama fungsi kustom apa pun. |
Argumen | Argumen bersifat opsional. Anda dapat menggunakan nama dan jenis data untuk argumen UDF Python dan hanya jenis data untuk argumen UDF SQL. Dalam UDF SQL, Anda harus merujuk ke argumen menggunakan $1 , $2 , dan seterusnya. Amazon Redshift juga membatasi jumlah argumen hingga 32. |
Argumen bersifat opsional, tetapi jika Anda menentukan argumen, argumen tersebut harus menggunakan jenis data dan nama untuk UDF JavaScript maupun SQL. Jumlah argumen maksimum untuk persistent UDF adalah 256. |
Data type | Amazon Redshift mendukung berbagai jenis data untuk UDF SQL dan Python. Untuk UDF Python, jenis datanya dapat berupa ANYELEMENT .Anda harus menentukan jenis data RETURN untuk UDF SQL maupun Python.Lihat Jenis data dalam dokumen ini untuk mengetahui padanan antara jenis data di Amazon Redshift dan di BigQuery. |
BigQuery mendukung berbagai jenis data untuk UDF SQL dan JavaScript. Untuk UDF SQL, jenis data dapat berupa ANY TYPE . Untuk mengetahui informasi selengkapnya, lihat parameter dengan template di BigQuery.Jenis data RETURN bersifat opsional untuk UDF SQL.Lihat encoding jenis SQL di JavaScript untuk informasi tentang cara jenis data BigQuery dipetakan ke jenis data JavaScript. |
Definisi | Baik untuk UDF SQL maupun Python, Anda harus menyertakan definisi fungsi menggunakan kutipan dolar, seperti pada sepasang tanda dolar ($$ ), untuk menunjukkan awal dan akhir pernyataan fungsi.Untuk UDF SQL, Amazon Redshift hanya mendukung klausa SELECT SQL sebagai definisi fungsi. Selain itu, klausa SELECT tidak boleh menyertakan klausa FROM , INTO , WHERE , GROUP BY , ORDER BY , dan LIMIT
.Untuk UDF Python, Anda dapat menulis program Python menggunakan Library Standar Python 2.7 atau mengimpor modul kustom Anda dengan membuatnya menggunakan perintah CREATE
LIBRARY . |
Di BigQuery, Anda harus menyertakan kode JavaScript dalam tanda kutip. Baca Aturan kutipan untuk mengetahui informasi selengkapnya. Untuk UDF SQL, Anda dapat menggunakan ekspresi SQL apa pun sebagai definisi fungsi. Namun, BigQuery tidak mendukung referensi tabel, tampilan, atau model. Untuk UDF JavaScript, Anda dapat menyertakan library kode eksternal secara langsung menggunakan bagian OPTIONS . Anda juga dapat menggunakan alat pengujian UDF BigQuery untuk menguji fungsi. |
Bahasa | Anda harus menggunakan literal LANGUAGE untuk menentukan bahasa sebagai sql untuk UDF SQL atau plpythonu
untuk UDF Python. |
Anda tidak perlu menentukan LANGUAGE untuk UDF SQL, tetapi harus menentukan bahasa sebagai js untuk UDF JavaScript. |
Status | Amazon Redshift tidak mendukung pembuatan temporary UDF. Amazon Redshift menyediakan opsi untuk menentukan volatilitas fungsi menggunakan literal VOLATILE , STABLE , atau IMMUTABLE . Ini digunakan untuk pengoptimalan oleh pengoptimal kueri. |
BigQuery mendukung persistent UDF maupun temporary UDF. Anda dapat menggunakan kembali persistent UDF di beberapa kueri, sedangkan Anda hanya dapat menggunakan temporary UDF dalam satu kueri. Volatilitas fungsi bukanlah parameter yang dapat dikonfigurasi di BigQuery. Semua volatilitas UDF BigQuery setara dengan volatilitas IMMUTABLE
Amazon Redshift. |
Keamanan dan hak istimewa | Untuk membuat UDF, Anda harus memiliki izin penggunaan dalam bahasa untuk SQL atau plpythonu (Python). Secara default, USAGE ON LANGUAGE SQL diberikan ke PUBLIC , tetapi Anda harus secara eksplisit memberikan USAGE ON LANGUAGE PLPYTHONU
kepada pengguna atau grup tertentu.Selain itu, Anda harus menjadi superuser untuk menggantikan UDF. |
Pemberian izin eksplisit untuk membuat atau menghapus semua jenis UDF tidak diperlukan di BigQuery. Setiap pengguna yang diberi peran BigQuery Data Editor (memiliki bigquery.routines.* sebagai salah satu izin) dapat membuat atau menghapus fungsi untuk set data yang ditentukan.BigQuery juga mendukung pembuatan peran khusus. Hal ini dapat dikelola menggunakan Cloud IAM. |
Batas | Lihat batas-batas UDF Python. | Lihat batas-batas UDF. |
Pernyataan SQL transaksi dan metadata
Amazon Redshift | BigQuery |
---|---|
SELECT * FROM STL_ANALYZE WHERE name |
Tidak digunakan di BigQuery. Anda tidak perlu mengumpulkan statistik untuk meningkatkan performa kueri. Untuk mendapatkan informasi tentang distribusi data, Anda dapat menggunakan fungsi agregat perkiraan. |
ANALYZE
[[ table_name[(column_name |
Tidak digunakan di BigQuery. |
LOCK
TABLE table_name; |
Tidak digunakan di BigQuery. |
BEGIN
TRANSACTION; SELECT ... |
BigQuery menggunakan snapshot isolation. Untuk mengetahui detailnya, lihat Jaminan konsistensi. |
EXPLAIN
... |
Tidak digunakan di BigQuery. Fitur serupa adalah penjelasan rencana kueri di konsol Google Cloud BigQuery, dan di logging audit di Cloud Monitoring. |
SELECT * FROM SVV_TABLE_INFO WHERE |
SELECT * EXCEPT(is_typed) FROM Untuk mengetahui informasi selengkapnya, lihat Pengantar BigQuery INFORMATION_SCHEMA . |
VACUUM
[table_name] |
Tidak digunakan di BigQuery. Tabel BigQuery yang dikelompokkan diurutkan secara otomatis. |
Pernyataan SQL multi-pernyataan dan multi-baris
Amazon Redshift maupun BigQuery mendukung transaksi (sesi) sehingga mendukung pernyataan yang dipisahkan dengan titik koma yang dijalankan bersama secara konsisten. Untuk informasi selengkapnya, lihat Transaksi multi-pernyataan.
Pernyataan SQL prosedural
Pernyataan CREATE PROCEDURE
Amazon Redshift | BigQuery |
---|---|
CREATE or
REPLACE PROCEDURE |
CREATE PROCEDURE jika nama diperlukan.Jika tidak, gunakan inline dengan BEGIN atau dalam satu baris dengan CREATE TEMP FUNCTION . |
CALL |
CALL |
Deklarasi dan penetapan variabel
Amazon Redshift | BigQuery |
---|---|
DECLARE |
DECLARE Mendeklarasikan variabel dari jenis yang ditentukan. |
SET |
SET Menetapkan variabel agar memiliki nilai ekspresi yang diberikan, atau menetapkan beberapa variabel sekaligus berdasarkan hasil dari beberapa ekspresi. |
Pengendali kondisi error
Di Amazon Redshift, error yang terjadi selama eksekusi prosedur tersimpan akan mengakhiri alur eksekusi, mengakhiri transaksi, dan me-roll back transaksi.
Hasil ini terjadi karena subtransaksi tidak didukung. Dalam prosedur yang disimpan Amazon Redshift, satu-satunya handler_statement
yang didukung adalah RAISE
. Di BigQuery, penanganan error adalah fitur inti dari alur kontrol utama, mirip dengan yang disediakan oleh bahasa lain dengan blok TRY ... CATCH
.
Amazon Redshift | BigQuery |
---|---|
BEGIN ...
EXCEPTION WHEN OTHERS THEN |
BEGIN ... EXCEPTION WHEN ERROR
THEN |
RAISE |
RAISE |
[ <<label>> ] [ DECLARE declarations ] |
BEGIN |
Deklarasi dan operasi kursor
Karena BigQuery tidak mendukung kursor atau sesi, pernyataan berikut tidak digunakan di BigQuery:
DECLARE
cursor_name
CURSOR
[FOR] ...
PREPARE
plan_name [ (datatype [, ...] ) ] AS statement
OPEN
cursor_name FOR SELECT ...
FETCH
[ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor_name
CLOSE
cursor_name;
Jika menggunakan kursor untuk menampilkan kumpulan hasil, Anda dapat mencapai perilaku serupa menggunakan tabel sementara di BigQuery.
Pernyataan SQL dinamis
Fitur pembuatan skrip di BigQuery mendukung pernyataan SQL dinamis seperti yang ditunjukkan dalam tabel berikut.
Amazon Redshift | BigQuery |
---|---|
EXECUTE |
EXECUTE IMMEDIATE |
Pernyataan flow-of-control
Amazon Redshift | BigQuery |
---|---|
IF..THEN..ELSIF..THEN..ELSE..END
IF |
IF condition |
name CURSOR
[ ( arguments ) ] FOR query |
Kursor atau sesi tidak digunakan di BigQuery. |
[< |
LOOP |
WHILE
condition LOOP stmts END LOOP |
WHILE condition |
EXIT |
BREAK |
Jaminan konsistensi dan transaction isolation
Amazon Redshift maupun BigQuery bersifat atomik—yaitu mematuhi ACID pada tingkat per mutasi di banyak baris.
Transaksi
Amazon Redshift mendukung isolasi yang dapat diserialisasi secara default untuk transaksi. Amazon Redshift memungkinkan Anda menentukan salah satu dari empat tingkat transaction isolation standar SQL, tetapi memproses semua tingkat isolasi sebagai dapat diserialisasi.
BigQuery juga mendukung transaksi. BigQuery membantu memastikan kontrol konkurensi optimistis (yang pertama di-commit memiliki prioritas) dengan isolasi snapshot, di mana kueri membaca data yang terakhir di-commit 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 konkurensi pesimistis. Tugas pemuatan dapat berjalan sepenuhnya secara independen dan ditambahkan ke tabel.
Rollback
Jika Amazon Redshift mengalami error saat menjalankan prosedur tersimpan, Amazon Redshift akan me-roll back semua perubahan yang dilakukan dalam transaksi. Selain itu, Anda dapat menggunakan pernyataan kontrol transaksi ROLLBACK
dalam prosedur tersimpan untuk menghapus semua perubahan.
Di BigQuery, Anda dapat menggunakan pernyataan ROLLBACK TRANSACTION
.
Batas database
Baca dokumentasi publik BigQuery untuk mengetahui kuota dan batas terbaru. Banyak kuota untuk pengguna bervolume besar dapat ditingkatkan dengan menghubungi tim dukungan Cloud. Tabel berikut menunjukkan perbandingan batas database Amazon Redshift dan BigQuery.
Batas | Amazon Redshift | BigQuery |
---|---|---|
Tabel di setiap database untuk jenis node cluster besar dan xlarge | 9.900 | Tidak dibatasi |
Tabel di setiap database untuk jenis node cluster berukuran 8xlarge | 20.000 | Tidak dibatasi |
Database yang ditentukan pengguna yang dapat Anda buat untuk setiap cluster | 60 | Tidak dibatasi |
Ukuran baris maksimum | 4 MB | 100 MB |