Guia de tradução de SQL do Amazon Redshift
Este documento detalha as semelhanças e as diferenças na sintaxe SQL entre o Amazon Redshift e o BigQuery para ajudar a planear a sua migração. Use a tradução de SQL em lote para migrar os seus scripts SQL em massa ou a tradução de SQL interativa para traduzir consultas ad hoc.
O público-alvo deste guia são arquitetos empresariais, administradores de bases de dados, programadores de aplicações e especialistas em segurança de TI. Parte do princípio de que conhece o Amazon Redshift.
Tipos de dados
Esta secção mostra os equivalentes entre os tipos de dados no Amazon Redshift e no BigQuery.
Amazon Redshift | BigQuery | Notes | |
---|---|---|---|
Tipo de dados | Alias | Tipo de dados | |
SMALLINT |
INT2 |
INT64 |
O SMALLINT do Amazon Redshift tem 2 bytes, enquanto o INT64 do BigQuery tem 8 bytes. |
INTEGER |
INT64 |
O INTEGER do Amazon Redshift tem 4 bytes, enquanto o INT64 do BigQuery tem 8 bytes. |
|
BIGINT |
INT8 |
INT64 |
Tanto o BIGINT do Amazon Redshift como o INT64 do BigQuery têm 8 bytes. |
DECIMAL |
NUMERIC |
NUMERIC |
|
REAL |
FLOAT4 |
FLOAT64 |
O REAL do Amazon Redshift tem 4 bytes, enquanto o FLOAT64 do BigQuery tem 8 bytes. |
DOUBLE
PRECISION |
FLOAT64 |
||
BOOLEAN |
BOOL |
BOOL |
O BOOLEAN do Amazon Redshift pode usar TRUE , t ,
true , y , yes e
1 como valores literais válidos para verdadeiro. O tipo de dados do BigQuery usa a opção não sensível a maiúsculas e minúsculas.BOOL TRUE |
CHAR |
STRING |
||
VARCHAR |
STRING |
||
DATE |
DATE |
||
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
DATETIME |
|
TIMESTAMPTZ |
TIMESTAMP |
Nota: no BigQuery, os fusos horários são usados ao analisar as datas/horas ou ao formatar as datas/horas para apresentação. Uma data/hora formatada como string pode incluir um fuso horário, mas quando o BigQuery analisa a string, armazena a data/hora na hora UTC equivalente. Quando não é especificado explicitamente um fuso horário, é usado o fuso horário predefinido, UTC. Os nomes dos fusos horários ou a diferença horária entre UTC através de (-|+)HH:MM são suportados, mas as abreviaturas dos fusos horários, como PDT, não são suportadas. | |
GEOMETRY |
GEOGRAPHY |
Suporte para consultar dados geoespaciais. |
O BigQuery também tem os seguintes tipos de dados que não têm um análogo direto no Amazon Redshift:
Tipos de conversões implícitas
Quando migra para o BigQuery, tem de converter a maioria das conversões implícitas do Amazon Redshift em conversões explícitas do BigQuery, exceto para os seguintes tipos de dados, que o BigQuery converte implicitamente.
O BigQuery faz conversões implícitas para os seguintes tipos de dados:
Do tipo BigQuery | Para o tipo do BigQuery |
---|---|
|
|
|
|
|
|
O BigQuery também faz conversões implícitas para os seguintes literais:
Do tipo BigQuery | Para o tipo do BigQuery |
---|---|
STRING literal (por exemplo, "2008-12-25") |
|
STRING literal (por exemplo, "2008-12-25 15:30:00") |
|
STRING literal (por exemplo, "2008-12-25T07:30:00") |
|
STRING literal (por exemplo, "15:30:00") |
|
Tipos de conversão explícitos
Pode converter tipos de dados do Amazon Redshift que o BigQuery não converte implicitamente
usando a função
CAST(expression AS type)
do BigQuery
ou qualquer uma das funções de conversão
DATE
e
TIMESTAMP
.
Quando migrar as suas consultas, altere todas as ocorrências da função Amazon Redshift
CONVERT(type, expression)
(ou a sintaxe ::) para a função
CAST(expression AS type)
do BigQuery,
conforme mostrado na tabela na secção Funções de formatação de tipos de dados.
Sintaxe de consulta
Esta secção aborda as diferenças na sintaxe de consulta entre o Amazon Redshift e o BigQuery.
SELECT
declaração
A maioria das declarações do Amazon Redshift
SELECT
é compatível com o BigQuery. A tabela seguinte contém uma lista de
diferenças menores.
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
O BigQuery também suporta as seguintes expressões em declarações SELECT
, que não têm um equivalente no Amazon Redshift:
FROM
cláusula
Uma cláusula
FROM
numa consulta apresenta as referências de tabelas a partir das quais os dados são selecionados. No Amazon Redshift, as referências de tabelas possíveis incluem tabelas, vistas e subconsultas. Todas estas referências de tabelas são suportadas no BigQuery.
As tabelas do BigQuery podem ser referenciadas na cláusula FROM
através do seguinte:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
O BigQuery também suporta referências de tabelas adicionais:
- Versões históricas da definição da tabela e das linhas através de
FOR SYSTEM_TIME AS OF
. - Caminhos dos campos,
ou qualquer caminho que seja resolvido para um campo num tipo de dados (como um
STRUCT
). - Matrizes reduzidas.
JOIN
tipos
O Amazon Redshift e o BigQuery suportam os seguintes tipos de junção:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
e a união cruzada com vírgula implícita equivalente.
A tabela seguinte contém uma lista de pequenas diferenças.
Amazon Redshift | BigQuery |
---|---|
|
Nota: no BigQuery, as cláusulas JOIN requerem uma condição JOIN , a menos que a cláusula seja CROSS
JOIN ou uma das tabelas associadas seja um campo num tipo de dados ou numa matriz. |
WITH
cláusula
Uma cláusula
WITH
do BigQuery contém uma ou mais subconsultas com nome que são executadas quando uma declaração
SELECT
subsequente faz referência às mesmas. Amazon Redshift
WITH
As cláusulas comportam-se da mesma forma que as do BigQuery, com a exceção de que pode avaliar
a cláusula uma vez e reutilizar os respetivos resultados.
Operadores de conjuntos
Existem algumas pequenas diferenças entre os operadores de conjuntos do Amazon Redshift e os operadores de conjuntos do BigQuery . No entanto, todas as operações de conjunto que são viáveis no Amazon Redshift são replicáveis no BigQuery.
Amazon Redshift | BigQuery |
---|---|
|
Nota: o BigQuery e o Amazon Redshift suportam o operador |
|
|
|
|
|
|
|
Nota: o BigQuery requer parênteses para separar diferentes operações de conjuntos. Se o mesmo operador de conjunto for repetido, os parênteses não são necessários. |
ORDER BY
cláusula
Existem algumas diferenças menores entre as cláusulas
ORDER BY
do Amazon Redshift e as cláusulas
ORDER BY
do BigQuery.
Amazon Redshift | BigQuery |
---|---|
No Amazon Redshift, os NULL são classificados por último por predefinição (ordem ascendente). |
No BigQuery, os NULL s são classificados primeiro por predefinição (por ordem ascendente). |
|
Nota: o BigQuery não usa a sintaxe LIMIT ALL , mas
ORDER BY ordena todas as linhas por predefinição, o que resulta no
mesmo comportamento que a cláusula LIMIT ALL do Amazon Redshift. Recomendamos vivamente que inclua uma cláusula LIMIT com cada cláusula ORDER BY . Ordenar todas as linhas de resultados desnecessariamente
degrada o desempenho da execução de consultas. |
|
Nota: no BigQuery, OFFSET tem de ser usado em conjunto com uma
LIMIT contagem. Certifique-se de que define o valor de count
INT64 para o mínimo de linhas necessárias ordenadas.
Ordenar todas as linhas de resultados degrada desnecessariamente o desempenho da execução de consultas. |
Condições
A tabela seguinte mostra as condições do Amazon Redshift, ou predicados, que são específicos do Amazon Redshift e têm de ser convertidos no respetivo equivalente do BigQuery.
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
|
|
|
Nota: o BigQuery não suporta carateres de escape personalizados. Tem de usar duas barras invertidas \\ como carateres de escape para o BigQuery. |
|
Nota: se NOT for especificado, envolva a expressão IF acima numa expressão NOT , conforme mostrado abaixo:
|
|
|
Funções
As secções seguintes listam as funções do Amazon Redshift e os respetivos equivalentes no BigQuery.
Funções de agregação
A tabela seguinte mostra os mapeamentos entre funções de agregação, funções analíticas de agregação e funções de agregação aproximadas comuns do Amazon Redshift com os respetivos equivalentes no BigQuery.
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( Nota: não abrange exemplos de utilização de agregação. |
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) |
O BigQuery também oferece as seguintes funções de agregação, agregação analítica e agregação aproximada, que não têm um análogo direto no Amazon Redshift:
ANY_VALUE
APPROX_TOP_COUNT
APPROX_TOP_SUM
ARRAY_AGG
ARRAY_CONCAT_AGG
COUNTIF
CORR
COVAR_POP
COVAR_SAMP
Funções de agregação bit a bit
A tabela seguinte mostra mapeamentos entre funções agregadas bit a bit comuns do Amazon Redshift com os respetivos equivalentes no BigQuery.
Amazon Redshift | BigQuery |
---|---|
BIT_AND(expression) |
BIT_AND(expression) |
BIT_OR(expression) |
BIT_OR(expression) |
BOOL_AND>(expression) |
LOGICAL_AND(expression) |
BOOL_OR(expression) |
LOGICAL_OR(expression) |
O BigQuery também oferece a seguinte função de agregação bit a bit, que não tem um análogo direto no Amazon Redshift:
Funções de janela
A tabela seguinte mostra os mapeamentos entre as funções de janela comuns do Amazon Redshift e os respetivos equivalentes no BigQuery. As funções de janelas no BigQuery incluem funções de agregação analíticas, funções de agregação, funções de navegação> e funções de numeração.
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 |
Expressões condicionais
A tabela seguinte mostra mapeamentos entre expressões condicionais comuns do Amazon Redshift com os respetivos equivalentes do BigQuery.
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) |
O BigQuery também oferece as seguintes expressões condicionais, que não têm um análogo direto no Amazon Redshift:
Funções de data e hora
A tabela seguinte mostra mapeamentos entre funções comuns de data e hora do Amazon Redshift com os respetivos equivalentes no BigQuery. As funções de data e hora do BigQuery incluem funções de data, funções de data/hora, funções de hora e funções de data/hora.
Tenha em atenção que as funções que parecem idênticas no Amazon Redshift e no BigQuery podem devolver tipos de dados diferentes.
Amazon Redshift | BigQuery |
---|---|
ADD_MONTHS( |
CAST( DATE_ADD( |
timestamptz_or_timestamp AT TIME
ZONE timezone |
PARSE_TIMESTAMP( Nota: os fusos horários são usados ao analisar datas/horas ou formatar datas/horas para apresentação. Uma data/hora formatada como string pode incluir um fuso horário, mas quando o BigQuery analisa a string, armazena a data/hora na hora UTC equivalente. Quando não é especificado explicitamente um fuso horário, é usado o fuso horário predefinido, UTC. Os nomes dos fusos horários ou o desvio do UTC (-HH:MM) são suportados, mas as abreviaturas dos fusos horários (como PDT) não são suportadas. |
CONVERT_TIMEZONE( |
PARSE_TIMESTAMP( Nota: source_timezone é UTC no BigQuery. |
CURRENT_DATE Nota: devolve a data de início da transação atual no fuso horário da sessão atual (UTC por predefinição). |
CURRENT_DATE() Nota: devolve a data de início do extrato atual no fuso horário 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( |
Para intervalos no Redshift, existem 360 dias num ano.
No BigQuery, pode usar a seguinte função definida pelo utilizador (UDF) para analisar um intervalo do Redshift e traduzi-lo em segundos. CREATE TEMP FUNCTION Para comparar literais de intervalo, execute: IF( |
LAST_DAY(date) |
DATE_SUB( |
MONTHS_BETWEEN( |
DATE_DIFF( |
NEXT_DAY(date, day) |
DATE_ADD( |
SYSDATE Nota: devolve a data/hora de início da transação atual no fuso horário da sessão atual (UTC por predefinição). |
CURRENT_TIMESTAMP() Nota: devolve a data/hora de início do extrato atual no fuso horário UTC. |
TIMEOFDAY() |
FORMAT_TIMESTAMP( |
TIMESTAMP_CMP( |
CASE |
TIMESTAMP_CMP_DATE( |
CASE |
TIMESTAMP_CMP_TIMESTAMPTZ(
Nota: o Redshift compara as datas/horas no fuso horário definido pela sessão do utilizador. O fuso horário predefinido da sessão do utilizador é UTC. |
CASE Nota: o BigQuery compara as datas/horas no fuso horário UTC. |
TIMESTAMPTZ_CMP( Nota: o Redshift compara as datas/horas no fuso horário definido pela sessão do utilizador. O fuso horário predefinido da sessão do utilizador é UTC. |
CASE Nota: o BigQuery compara as datas/horas no fuso horário UTC. |
TIMESTAMPTZ_CMP_DATE( Nota: o Redshift compara as datas/horas no fuso horário definido pela sessão do utilizador. O fuso horário predefinido da sessão do utilizador é UTC. |
CASE Nota: o BigQuery compara as datas/horas no fuso horário UTC. |
TIMESTAMPTZ_CMP_TIMESTAMP(
Nota: o Redshift compara as datas/horas no fuso horário definido pela sessão do utilizador. O fuso horário predefinido da sessão do utilizador é UTC. |
CASE Nota: o BigQuery compara as datas/horas no fuso horário UTC. |
TIMEZONE( |
PARSE_TIMESTAMP( Nota: os fusos horários são usados ao analisar datas/horas ou formatar datas/horas para apresentação. Uma data/hora formatada como string pode incluir um fuso horário, mas quando o BigQuery analisa a string, armazena a data/hora na hora UTC equivalente. Quando não é especificado explicitamente um fuso horário, é usado o fuso horário predefinido, UTC. Os nomes dos fusos horários ou o desvio do UTC (-HH:MM) são suportados, mas as abreviaturas dos fusos horários (como PDT) não são suportadas. |
TO_TIMESTAMP(timestamp,
format) |
PARSE_TIMESTAMP( Nota: o BigQuery segue um conjunto diferente de elementos de formato. As zonas horárias são usadas quando se analisam indicações de tempo ou se formatam indicações de tempo para apresentação. Uma data/hora formatada como string pode incluir um fuso horário, mas quando o BigQuery analisa a string, armazena a data/hora na hora UTC equivalente. Quando não é especificado explicitamente um fuso horário, é usado o fuso horário predefinido, UTC. Os nomes dos fusos horários ou o desvio do UTC (-HH:MM) são suportados na string de formato, mas as abreviaturas dos fusos horários (como PDT) não são suportadas. |
TRUNC(timestamp) |
CAST(timestamp AS
DATE) |
O BigQuery também oferece as seguintes funções de data e hora, que não têm um análogo direto no Amazon Redshift:
EXTRACT
DATE
DATE_SUB
DATE_ADD
(devolve o tipo de dadosDATE
)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
Operadores matemáticos
A tabela seguinte mostra os mapeamentos entre operadores matemáticos comuns do Amazon Redshift e os respetivos equivalentes no BigQuery.
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
|
|
Nota: se o operador estiver a realizar uma divisão inteira (por outras palavras, se X e
Y forem ambos
números inteiros), é devolvido um número inteiro. Se o operador estiver a realizar uma divisão não inteira, é devolvido um valor não inteiro. |
Se for divisão inteira: CAST(FLOOR(X / Y) AS INT64)
Se não for divisão inteira:
Nota: a divisão no BigQuery devolve um valor não inteiro. Para evitar erros de uma operação de divisão (erro de divisão por zero), use SAFE_DIVIDE(X, Y) ou
IEEE_DIVIDE(X, Y) . |
|
Nota: para evitar erros de uma operação de divisão (erro de divisão por zero), use SAFE.MOD(X, Y) . SAFE.MOD(X, 0) resultados em 0. |
|
Nota: ao contrário do Amazon Redshift, o operador ^ no BigQuery executa o xor bit a bit. |
|
Nota: para evitar erros de uma operação de raiz quadrada (entrada negativa), use SAFE.SQRT(X) . Entrada negativa
com SAFE.SQRT(X) resulta em
NULL . |
|
Nota: a função POWER(X, Y) do BigQuery devolve um erro se X for um valor finito inferior a 0
e Y for um valor não inteiro. |
|
|
|
Nota: este operador devolve 0 ou uma sequência de bytes de b'\x00' se o segundo operando Y for superior ou igual ao comprimento de bits do
primeiro operando X (por exemplo, 64 se X tiver o tipo INT64). Este operador gera um erro se Y for negativo. |
|
Nota: desloca o primeiro operando X para a direita. Este operador não faz a extensão do bit de sinal com um tipo assinado (preenche os bits vazios à esquerda com 0). Este operador devolve 0 ou uma sequência de bytes de b'\x00' se o segundo operando Y for maior ou igual ao comprimento
em bits do primeiro operando X (por exemplo, 64 se X tiver o tipo
INT64). Este operador gera um erro se Y for negativo. |
|
|
|
|
|
|
O BigQuery também oferece o seguinte operador matemático, que não tem um análogo direto no Amazon Redshift:
X ^ Y
(Bitwise xor)
Funções matemáticas
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])
|
Funções de 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) Nota: a função CONCAT (...) do BigQuery suporta a concatenação de qualquer número de strings. |
CRC32 |
Função definida pelo utilizador personalizada |
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( Se position for especificado: ARRAY_LENGTH( REGEXP_EXTRACT_ALL( Nota: o BigQuery oferece suporte para expressões regulares através da biblioteca re2 . Consulte essa documentação para ver a respetiva sintaxe de expressões regulares. |
REGEXP_INSTR( |
IFNULL( STRPOS( Se source_string for especificado: REGEXP_REPLACE( Se position for especificado:IFNULL( STRPOS( Se occurrence for especificado:IFNULL( STRPOS( Nota: o BigQuery oferece suporte de expressões regulares através da biblioteca re2
; consulte essa documentação para ver a sintaxe das expressões regulares. |
REGEXP_REPLACE(
source_string, |
REGEXP_REPLACE( Se source_string estiver especificado:
REGEXP_REPLACE( Se position estiver especificado:CASE |
REGEXP_SUBSTR(
source_string, pattern |
REGEXP_EXTRACT( Se position for especificado:REGEXP_EXTRACT( Se occurrence for especificado:REGEXP_EXTRACT_ALL( Nota: o BigQuery oferece suporte para expressões regulares através da biblioteca re2 . Consulte essa documentação para ver a respetiva sintaxe de expressões regulares.
|
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( |
Pode ser implementado através de UDFs: CREATE TEMP FUNCTION |
TRIM([BOTH] string) |
TRIM(string) |
TRIM([BOTH] characters FROM
string) |
TRIM(string, characters)
|
UPPER(string) |
UPPER(string) |
Funções de formatação do tipo de dados
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( Nota: o BigQuery e o Amazon Redshift diferem na forma como especificar uma string de formato para timestamp_expression . |
TO_CHAR(
|
FORMAT( Nota: o BigQuery e o Amazon Redshift diferem na forma como especificar uma string de formato para timestamp_expression .
|
TO_DATE(date_string, format) |
PARSE_DATE(date_string, format)
Nota: o BigQuery e o Amazon Redshift diferem na forma como especificar uma string de formato para date_string . |
TO_NUMBER(string, format) |
CAST( Nota: o BigQuery e o Amazon Redshift diferem na forma como especificar uma string de formato numérico. |
O BigQuery também suporta SAFE_CAST
(expression
AS typename)
, que devolve NULL
se o BigQuery não conseguir realizar uma conversão; por exemplo, SAFE_CAST
("apple"
AS INT64)
devolve NULL
.
Sintaxe DML
Esta secção aborda as diferenças na sintaxe da linguagem de gestão de dados entre o Amazon Redshift e o BigQuery.
INSERT
declaração
O Amazon Redshift oferece uma palavra-chave DEFAULT
configurável para colunas. No BigQuery, o valor DEFAULT
para colunas anuláveis é NULL
e DEFAULT
não é suportado para colunas obrigatórias. A maioria das declarações do Amazon Redshift é compatível com o BigQuery.INSERT
A tabela seguinte mostra as exceções.
Amazon Redshift | BigQuery |
---|---|
INSERT INTO table (column1 [, ...]) |
INSERT [INTO] table (column1 [, ...]) |
INSERT INTO table (column1, [,...]) VALUES ( |
INSERT [INTO] table (column1, [,...]) |
O BigQuery também suporta a inserção de valores através de uma subconsulta (em que um dos valores é calculado através de uma subconsulta), o que não é suportado no Amazon Redshift. Por exemplo:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
COPY
declaração
O comando COPY
do Amazon Redshift
carrega dados numa tabela a partir de ficheiros de dados ou de uma tabela do Amazon DynamoDB.
O BigQuery não usa o comando SQL COPY
para carregar dados, mas pode usar várias ferramentas e opções não SQL para carregar dados para tabelas do BigQuery.
Também pode usar os destinos do pipeline de dados fornecidos no
Apache Spark
ou no
Apache Beam
para escrever dados no BigQuery.
UPDATE
declaração
A maioria das declarações do Amazon Redshift UPDATE
é compatível com o BigQuery. A tabela
seguinte mostra as exceções.
Amazon Redshift | BigQuery |
---|---|
UPDATE table |
UPDATE table Nota: todas as declarações UPDATE no BigQuery requerem uma palavra-chave WHERE ,
seguida de uma condição. |
UPDATE table |
UPDATE table Nota: o comando UPDATE do BigQuery não suporta valores DEFAULT .
Se a declaração UPDATE do Amazon Redshift não incluir uma cláusula WHERE , a declaração UPDATE do BigQuery deve ser condicional WHERE TRUE . |
DELETE
e TRUNCATE
extratos
As declarações DELETE
e TRUNCATE
são formas de remover linhas de uma tabela sem afetar o esquema ou os índices da tabela.
No Amazon Redshift, a declaração TRUNCATE
é recomendada em vez de uma declaração DELETE
não qualificada porque é mais rápida e não requer operações VACUUM
e ANALYZE
posteriormente.
No entanto, pode usar declarações DELETE
para conseguir o mesmo efeito.
No BigQuery, a declaração DELETE
tem de ter uma cláusula WHERE
. Para mais
informações sobre DELETE
no BigQuery, consulte os
DELETE
exemplos
do BigQuery na documentação de DML.
Amazon Redshift | BigQuery |
---|---|
DELETE
[FROM] table_name TRUNCATE
[TABLE] table_name |
DELETE FROM table_name As declarações do BigQuery requerem uma cláusula DELETE .WHERE |
DELETE FROM table_name |
DELETE FROM table_name DELETE FROM table_name No Amazon Redshift, USING permite que sejam feitas referências a tabelas adicionais na cláusula WHERE . Isto pode ser conseguido no BigQuery usando uma subconsulta na cláusula WHERE . |
MERGE
declaração
A declaração MERGE
pode combinar operações INSERT
, UPDATE
> e DELETE
numa única declaração de inserção/atualização e executar as operações de forma atómica. A operação tem de corresponder, no máximo, a uma linha de origem para cada linha de destino.MERGE
O Amazon Redshift não suporta um único comando do MERGE
. No entanto, pode executar uma
operação de união
no Amazon Redshift executando as operações
INSERT
, UPDATE
e DELETE
numa transação.
Operação de união através da substituição de linhas existentes
No Amazon Redshift, pode substituir todas as colunas na tabela de destino com uma declaração DELETE
e, em seguida, uma declaração INSERT
. A declaração DELETE
remove as linhas que devem ser atualizadas e, em seguida, a declaração INSERT
insere as linhas atualizadas. As tabelas do BigQuery estão limitadas a 1000 declarações DML por dia, pelo que deve consolidar as declarações INSERT
, UPDATE
e DELETE
numa única declaração MERGE
, conforme mostrado na tabela seguinte.
Amazon Redshift | BigQuery |
---|---|
Consulte o artigo Executar uma operação de união através da
substituição de linhas existentes. CREATE TEMP TABLE temp_table; |
MERGE target Nota: se atualizar todas as colunas, tem de as indicar todas. |
Consulte o artigo Realizar uma operação de união especificando uma lista de colunas. CREATE TEMP TABLE temp_table; |
MERGE target |
Sintaxe DDL
Esta secção aborda as diferenças na sintaxe da linguagem de definição de dados entre o Amazon Redshift e o BigQuery.
SELECT INTO
declaração
No Amazon Redshift, a declaração SELECT INTO
pode ser usada para inserir os resultados de uma consulta numa nova tabela, combinando a criação e a inserção de tabelas.
Amazon Redshift | BigQuery |
---|---|
SELECT expression, ... INTO table |
INSERT table |
WITH subquery_table AS ( SELECT ... |
INSERT table |
SELECT expression |
O BigQuery oferece várias formas de emular tabelas temporárias. Consulte a secção tabelas temporárias para mais informações. |
CREATE TABLE
declaração
A maioria das declarações do Amazon Redshift
CREATE TABLE
é compatível com o BigQuery, exceto os seguintes elementos de sintaxe, que não são usados no BigQuery:
Amazon Redshift | BigQuery |
---|---|
CREATE TABLE table_name ( Nota: as restrições UNIQUE e PRIMARY KEY são
informativas e não são
aplicadas pelo sistema Amazon Redshift. |
CREATE TABLE table_name ( |
CREATE TABLE table_name Nota: as restrições UNIQUE e PRIMARY KEY são informativas e não são aplicadas pelo sistema Amazon Redshift.
|
CREATE TABLE table_name Nota: o BigQuery não usa restrições de tabelas UNIQUE , PRIMARY KEY nem FOREIGN KEY . Para alcançar uma otimização semelhante à que estas restrições oferecem durante a execução de consultas,
crie partições e clusters nas suas tabelas do BigQuery. CLUSTER BY suporta até 4 colunas. |
CREATE TABLE table_name |
Consulte este exemplo para saber como usar as tabelas INFORMATION_SCHEMA para copiar nomes de colunas, tipos de dados e restrições NOT NULL para uma nova tabela. |
CREATE TABLE table_name Nota: no Amazon Redshift, a definição BACKUP
NO é especificada para poupar tempo de processamento e reduzir o espaço de armazenamento. |
A opção de tabela BACKUP NO não é usada nem necessária porque o BigQuery
mantém automaticamente até 7 dias de versões do histórico de todas as
suas tabelas sem afetar o tempo de processamento nem o armazenamento faturado.
|
CREATE TABLE table_name |
O BigQuery suporta o clustering, o que permite armazenar chaves por ordem ordenada. |
CREATE TABLE table_name |
CREATE TABLE table_name |
CREATE TABLE IF NOT EXISTS table_name ... |
CREATE TABLE IF NOT EXISTS |
O BigQuery também suporta a declaração DDL CREATE OR REPLACE TABLE
, que substitui uma tabela se já existir.
A declaração CREATE TABLE
do BigQuery também suporta as seguintes cláusulas, que não têm um equivalente no Amazon Redshift:
Para mais informações sobre CREATE TABLE
no BigQuery, consulte os
CREATE TABLE
exemplos
na documentação da DML.
Tabelas temporárias
O Amazon Redshift suporta tabelas temporárias, que só são visíveis na sessão atual. Existem várias formas de emular tabelas temporárias no BigQuery:
- TTL do conjunto de dados: crie um conjunto de dados com um tempo de vida curto (por exemplo, uma hora) para que todas as tabelas criadas no conjunto de dados sejam efetivamente temporárias, uma vez que não persistem mais tempo do que o tempo de vida do conjunto de dados. Pode adicionar o prefixo temp a todos os nomes das tabelas neste conjunto de dados para indicar claramente que as tabelas são temporárias.
TTL da tabela: crie uma tabela com um tempo de vida curto específico da tabela usando declarações DDL semelhantes às seguintes:
CREATE TABLE temp.name (col1, col2, ...) OPTIONS (expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));
CREATE VIEW
declaração
A tabela seguinte mostra os equivalentes entre o Amazon Redshift e o BigQuery para a declaração 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
... |
Não suportado. | CREATE VIEW IF NOT EXISTS c
view_name Cria uma nova visualização de propriedade apenas se a visualização de propriedade não existir no conjunto de dados especificado. |
CREATE VIEW view_name No Amazon Redshift, é necessária uma vista de associação tardia para fazer referência a uma tabela externa. |
No BigQuery, para criar uma vista, todos os objetos referenciados têm de existir. O BigQuery permite-lhe consultar origens de dados externas. |
Funções definidas pelo utilizador (FDUs)
Uma FDU permite-lhe criar funções para operações personalizadas. Estas funções aceitam colunas de entrada, realizam ações e devolvem o resultado dessas ações como um valor.
Tanto o Amazon Redshift como o BigQuery suportam UDFs através de expressões SQL. Além disso, no Amazon Redshift, pode criar uma UDF baseada em Python e, no BigQuery, pode criar uma UDF baseada em JavaScript.
Consulte o repositório do GitHub de utilitários do Google Cloud BigQuery para aceder a uma biblioteca de UDFs comuns do BigQuery.
Sintaxe CREATE FUNCTION
A tabela seguinte aborda as diferenças na sintaxe de criação de UDFs SQL entre o Amazon Redshift e o BigQuery.
Amazon Redshift | BigQuery |
---|---|
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION Nota: numa UDF SQL do BigQuery, um tipo de dados de retorno é opcional. O BigQuery infere o tipo de resultado da função a partir do corpo da função SQL quando uma consulta chama a função. |
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION Nota: a volatilidade da função não é um parâmetro configurável no BigQuery. Toda a volatilidade da UDF do BigQuery é equivalente à volatilidade do Amazon Redshift (ou seja, não faz pesquisas na base de dados nem usa informações que não estejam diretamente presentes na respetiva lista de argumentos). IMMUTABLE
|
CREATE [OR
REPLACE] FUNCTION Nota: o Amazon Redshift suporta apenas uma cláusula SQL SELECT como definição de função. Além disso, a cláusula SELECT não pode incluir nenhuma das cláusulas FROM,
INTO, WHERE, GROUP BY, ORDER BY, e LIMIT . |
CREATE [OR REPLACE] FUNCTION Nota: o BigQuery suporta quaisquer expressões SQL como definição de função. No entanto, não é possível fazer referência a tabelas, vistas ou modelos. |
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION
function_name ([sql_arg_name sql_arg_data_type[,..]]) RETURNS
data_type AS sql_function_definition Nota: não é necessário especificar o literal de idioma numa UDF do GoogleSQL. O BigQuery interpreta a expressão SQL por predefinição. Além disso, o Amazon Redshift usa as aspas duplas ( $$ ) is not supported in BigQuery. |
CREATE [OR
REPLACE] FUNCTION function_name (integer, integer) RETURNS
integer IMMUTABLE AS $$ SELECT $1 + $2 $$ LANGUAGE sql |
CREATE [OR REPLACE] FUNCTION Note: BigQuery UDFs require all input arguments to be named. The Amazon Redshift argument variables ( $1 , $2 , …) are not supported in
BigQuery. |
CREATE [OR
REPLACE] FUNCTION Note: Amazon Redshift does not support ANY TYPE for SQL UDFs. However, it
supports using the ANYELEMENT
data type in Python-based UDFs. |
CREATE [OR REPLACE] FUNCTION Note: BigQuery supports using ANY TYPE as argument type. The function
accepts an input of any type for this argument. For more information,
see templated parameter in BigQuery.
|
BigQuery also supports the CREATE FUNCTION IF NOT EXISTS
statement, which
treats the query as successful and takes no action if a function with the same
name already exists.
BigQuery's CREATE FUNCTION
statement also supports creating
TEMPORARY
or TEMP
functions, which do not have an Amazon Redshift 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
Amazon Redshift and BigQuery.
Amazon Redshift | BigQuery |
---|---|
DROP
FUNCTION |
DROP FUNCTION Note: BigQuery does not require using the function's signature for deleting the function. Also, removing function dependencies is not supported in BigQuery. |
BigQuery also supports the
DROP FUNCTION IF EXISTS
statement,
which deletes the function only if the function exists in the specified
dataset.
BigQuery requires that you specify the project_name
if the function is not located in the current project.
UDF components
This section highlights the similarities and differences in UDF components between Amazon Redshift andBigQuery.
Component | Amazon Redshift | BigQuery |
---|---|---|
Name | Amazon Redshift recommends using the prefix
_f for function names to avoid conflicts with existing
or future built-in SQL function names. |
In BigQuery, you can use any custom function name. |
Arguments | Arguments are optional. You can use name and data types for Python
UDF arguments and only data types for SQL UDF arguments. In SQL UDFs,
you must refer to arguments using $1 , $2 ,
and so on. Amazon Redshift also restricts
the number of arguments to 32. |
Arguments are optional, but if you specify arguments, they must use both name and data types for both JavaScript and SQL UDFs. The maximum number of arguments for a persistent UDF is 256. |
Data type | Amazon Redshift supports a different set of data types for SQL
and Python UDFs. For a Python UDF, the data type might also be ANYELEMENT .You must specify a RETURN data type for both SQL and
Python UDFs.See Data types in this document for equivalents between data types in Amazon Redshift and in BigQuery. |
BigQuery supports a different set of data types for SQL and JavaScript UDFs. For a SQL UDF, the data type might also be ANY TYPE . For
more information, see templated parameters in
BigQuery.The RETURN data type is optional for SQL UDFs.See Supported JavaScript UDF data types for information on how BigQuery data types map to JavaScript data types. |
Definition | For both SQL and Python UDFs, you must enclose the function
definition using dollar quoting, as in a pair of dollar signs
($$ ) para indicar o início e o fim das declarações de funções.Para UDFs de SQL,o Amazon Redshift suporta apenas uma SELECT cláusula
SQL como a definição da função. Além disso, a cláusula SELECT não pode incluir nenhuma das cláusulas FROM , INTO , WHERE , GROUP , , BY , ORDER BY e LIMIT
.Para UDFs do Python, pode escrever um programa Python usando a biblioteca padrão do Python 2.7 ou importar os seus módulos personalizados criando um com o comando CREATE
LIBRARY . |
No BigQuery, tem de colocar o código JavaScript entre aspas. Consulte as regras de citação para mais informações. Para FDUs SQL, pode usar quaisquer expressões SQL como definição da função. No entanto, o BigQuery não suporta referências a tabelas, vistas nem modelos. Para UDFs JavaScript, pode incluir bibliotecas de código externas diretamente através da secção OPTIONS . Também pode usar a ferramenta de teste
UDF do BigQuery para testar as suas funções. |
Idioma | Tem de usar o literal LANGUAGE para especificar o idioma como sql para FDUs SQL ou plpythonu
para FDUs Python. |
Não tem de especificar LANGUAGE para FDUs SQL, mas tem de especificar o idioma como js para FDUs JavaScript. |
Estado | O Amazon Redshift não suporta a criação de UDFs temporárias. O Amazon Redshift oferece uma opção para definir a volatilidade de uma função através de VOLATILE , STABLE ,
ou literais IMMUTABLE . Isto é usado para otimização pelo otimizador de consultas. |
O BigQuery suporta UDFs persistentes e temporárias. Pode reutilizar FDUs persistentes em várias consultas, enquanto só pode usar FDUs temporárias numa única consulta. A volatilidade da função não é um parâmetro configurável no BigQuery. Toda a volatilidade das UDFs do BigQuery é equivalente à IMMUTABLE
volatilidade do Amazon Redshift. |
Segurança e privilégios | Para criar uma FDU, tem de ter autorização
para utilização na linguagem para SQL ou plpythonu (Python). Por predefinição,
USAGE ON LANGUAGE SQL é concedido a PUBLIC ,
mas tem de conceder explicitamente USAGE ON LANGUAGE PLPYTHONU
a utilizadores ou grupos específicos.Além disso, tem de ser um superutilizador para substituir uma FDU. |
Não é necessário conceder autorizações explícitas para criar ou eliminar qualquer tipo de UDF no BigQuery. Qualquer utilizador ao qual seja atribuída a função de editor de dados do BigQuery (com
bigquery.routines.* como uma das autorizações)
pode criar ou eliminar funções para o conjunto de dados especificado.O BigQuery também suporta a criação de funções personalizadas. Pode gerir esta opção com o Cloud IAM. |
Limites | Consulte os limites das UDFs do Python. | Consulte os limites das funções definidas pelo utilizador. |
Metadados e declarações SQL de transações
Amazon Redshift | BigQuery |
---|---|
SELECT * FROM STL_ANALYZE WHERE name |
Não usado no BigQuery. Não precisa de recolher estatísticas para melhorar o desempenho das consultas. Para obter informações sobre a distribuição dos seus dados, pode usar funções agregadas aproximadas. |
ANALYZE
[[ table_name[(column_name |
Não usado no BigQuery. |
LOCK
TABLE table_name; |
Não usado no BigQuery. |
BEGIN
TRANSACTION; SELECT ... |
O BigQuery usa o isolamento de instantâneos. Para ver detalhes, consulte as garantias de consistência. |
EXPLAIN
... |
Não usado no BigQuery. Funcionalidades semelhantes são a explicação do plano de consulta na consola do BigQuery Trusted Cloud e o registo de auditoria no Cloud Monitoring. |
SELECT * FROM SVV_TABLE_INFO WHERE |
SELECT * EXCEPT(is_typed) FROM Para mais informações, consulte o artigo Introdução ao BigQuery INFORMATION_SCHEMA . |
VACUUM
[table_name] |
Não usado no BigQuery. As tabelas agrupadas do BigQuery são ordenadas automaticamente. |
Declarações SQL multilinhas e com várias declarações
O Amazon Redshift e o BigQuery suportam transações (sessões) e, por isso, suportam declarações separadas por pontos e vírgulas que são executadas de forma consistente em conjunto. Para mais informações, consulte o artigo Transações com vários extratos.
Declarações SQL processuais
CREATE PROCEDURE
declaração
Amazon Redshift | BigQuery |
---|---|
CREATE or
REPLACE PROCEDURE |
CREATE PROCEDURE se for necessário um nome.Caso contrário, use o formato inline com BEGIN ou numa única linha com CREATE TEMP FUNCTION . |
CALL |
CALL |
Declaração e atribuição de variáveis
Amazon Redshift | BigQuery |
---|---|
DECLARE |
DECLARE Declara uma variável do tipo especificado. |
SET |
SET Define uma variável para ter o valor da expressão fornecida ou define várias variáveis ao mesmo tempo com base no resultado de várias expressões. |
Controladores de condições de erro
No Amazon Redshift, um erro encontrado durante a execução de um procedimento armazenado termina o fluxo de execução, termina a transação e reverte a transação.
Estes resultados ocorrem porque as subtransações não são suportadas. Num procedimento armazenado do Amazon Redshift, o único handler_statement
suportado é RAISE
. No BigQuery, o processamento de erros é uma funcionalidade essencial do fluxo de controlo principal, semelhante ao que outras linguagens oferecem com blocos TRY ... CATCH
.
Amazon Redshift | BigQuery |
---|---|
BEGIN ...
EXCEPTION WHEN OTHERS THEN |
BEGIN ... EXCEPTION WHEN ERROR
THEN |
RAISE |
RAISE |
[ <<label>> ] [ DECLARE declarations ] |
BEGIN |
Declarações e operações do cursor
Uma vez que o BigQuery não suporta cursores nem sessões, as seguintes declarações não são usadas no 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;
Se estiver a usar o cursor para devolver um conjunto de resultados, pode obter um comportamento semelhante usando tabelas temporárias no BigQuery.
Declarações SQL dinâmicas
A funcionalidade de scripts no BigQuery suporta declarações SQL dinâmicas, como as apresentadas na tabela seguinte.
Amazon Redshift | BigQuery |
---|---|
EXECUTE |
EXECUTE IMMEDIATE |
Declarações de fluxo de controlo
Amazon Redshift | BigQuery |
---|---|
IF..THEN..ELSIF..THEN..ELSE..END
IF |
IF condition |
name CURSOR
[ ( arguments ) ] FOR query |
Não são usados cursores nem sessões no BigQuery. |
[< |
LOOP |
WHILE
condition LOOP stmts END LOOP |
WHILE condition |
EXIT |
BREAK |
Garantias de consistência e isolamento de transações
O Amazon Redshift e o BigQuery são atómicos, ou seja, estão em conformidade com ACID ao nível de cada mutação em várias linhas.
Transações
O Amazon Redshift suporta o isolamento serializável por predefinição para transações. O Amazon Redshift permite-lhe especificar qualquer um dos quatro níveis de isolamento de transações padrão SQL, mas processa todos os níveis de isolamento como serializáveis.
O BigQuery também suporta transações. O BigQuery ajuda a garantir o controlo de concorrência otimista (a primeira confirmação tem prioridade) com isolamento de instantâneo, em que uma consulta lê os últimos dados confirmados antes de começar. Esta abordagem garante o mesmo nível de consistência por linha, por mutação e entre linhas na mesma declaração DML, mas evita bloqueios. No caso de várias atualizações de DML na mesma tabela, o BigQuery muda para o controlo de concorrência pessimista. Os trabalhos de carregamento podem ser executados de forma totalmente independente e anexados a tabelas.
Reversão
Se o Amazon Redshift encontrar algum erro durante a execução de um procedimento armazenado, reverte todas as alterações feitas numa transação. Além disso, pode usar a declaração de controlo de transações ROLLBACK
num procedimento armazenado para rejeitar todas as alterações.
No BigQuery, pode usar a declaração ROLLBACK TRANSACTION
.
Limites da base de dados
Consulte a documentação pública do BigQuery para ver as quotas e os limites mais recentes. Muitas quotas para utilizadores de grande volume podem ser aumentadas contactando a equipa de apoio técnico do Google Cloud. A tabela seguinte mostra uma comparação dos limites da base de dados do Amazon Redshift e do BigQuery.
Limite | Amazon Redshift | BigQuery |
---|---|---|
Tabelas em cada base de dados para tipos de nós de cluster grandes e extragrandes | 9900 | Sem restrições |
Tabelas em cada base de dados para tipos de nós de cluster 8xlarge | 20 000 | Sem restrições |
Bases de dados definidas pelo utilizador que pode criar para cada cluster | 60 | Sem restrições |
Tamanho máximo da linha | 4 MB | 100 MB |