Guia de tradução de SQL do Snowflake
Este documento detalha as semelhanças e as diferenças na sintaxe SQL entre o Snowflake e o BigQuery para ajudar a acelerar o planeamento e a execução da transferência do seu EDW (Enterprise Data Warehouse) para o BigQuery. O armazenamento de dados do Snowflake foi concebido para funcionar com a sintaxe SQL específica do Snowflake. Os scripts escritos para o Snowflake podem ter de ser alterados antes de os poder usar no BigQuery, porque os dialetos de SQL variam entre os serviços. 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 SQL do Snowflake é suportado por ambas as ferramentas na pré-visualização.
Tipos de dados
Esta secção mostra os equivalentes entre os tipos de dados no Snowflake e no BigQuery.
Floco de neve | BigQuery | Notas |
---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC/BIGNUMERIC |
Pode ser mapeado para NUMERIC ou BIGNUMERIC , consoante a precisão e a escala.O tipo de dados NUMBER no Snowflake suporta 38 dígitos de precisão e 37 dígitos de escala. A precisão e a escala podem ser especificadas de acordo com o utilizador.O BigQuery suporta NUMERIC e BIGNUMERIC com precisão e escala especificadas opcionalmente dentro de determinados limites. |
INT/INTEGER |
BIGNUMERIC |
INT/INTEGER e todos os outros tipos de dados semelhantes a INT , como BIGINT, TINYINT, SMALLINT, BYTEINT , representam um alias para o tipo de dados NUMBER , em que a precisão e a escala não podem ser especificadas e são sempre NUMBER(38, 0) A opção de configuração REWRITE_ZERO_SCALE_NUMERIC_AS_INTEGER pode ser usada para converter INTEGER e tipos relacionados em INT64 . |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
O tipo de dados FLOAT no Snowflake estabelece "NaN" como > X, em que X é qualquer valor FLOAT (exceto o próprio "NaN").O tipo de dados FLOAT no BigQuery estabelece "NaN" como < X, onde X é qualquer valor FLOAT (exceto o próprio "NaN"). |
DOUBLE/ REAL |
FLOAT64 |
O tipo de dados DOUBLE no Snowflake é sinónimo do tipo de dados FLOAT no Snowflake, mas é frequentemente apresentado incorretamente como FLOAT . É armazenado corretamente como DOUBLE . |
VARCHAR |
STRING |
O tipo de dados VARCHAR no Snowflake tem um comprimento máximo de 16 MB (não comprimido). Se o comprimento não for especificado, o valor predefinido é o comprimento máximo.O tipo de dados STRING no BigQuery é armazenado como Unicode codificado em UTF-8 de comprimento variável. O comprimento máximo é de 16 000 carateres. |
CHAR/CHARACTER |
STRING |
O tipo de dados CHAR no Snowflake tem um comprimento máximo de 1. |
STRING/TEXT |
STRING |
O tipo de dados STRING no Snowflake é sinónimo de VARCHAR do Snowflake. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
O tipo de dados BOOL no BigQuery só pode aceitar TRUE/FALSE , ao contrário do tipo de dados BOOL no Snowflake, que pode aceitar TRUE/FALSE/NULL. |
DATE |
DATE |
O tipo DATE no Snowflake aceita os formatos de data mais comuns, ao contrário do tipo DATE no BigQuery, que só aceita datas no formato "AAAA-[M]M-[D]D". |
TIME |
TIME |
O tipo TIME no Snowflake suporta 0 a 9 nanosegundos de precisão, enquanto o tipo TIME no BigQuery suporta 0 a 6 nanosegundos de precisão. |
TIMESTAMP |
DATETIME |
TIMESTAMP é um alias configurável pelo utilizador que é predefinido como TIMESTAMP_NTZ , que é mapeado para DATETIME no BigQuery. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
O tipo OBJECT no Snowflake não suporta valores com tipos explícitos. Os valores são do tipo VARIANT . |
VARIANT |
JSON |
O tipo OBJECT no Snowflake não suporta valores com tipos explícitos. Os valores são do tipo VARIANT . |
ARRAY |
ARRAY<JSON> |
O tipo ARRAY no Snowflake só pode suportar tipos VARIANT , enquanto o tipo ARRAY no BigQuery pode suportar todos os tipos de dados, exceto uma matriz. |
O BigQuery também tem os seguintes tipos de dados que não têm um análogo direto no Snowflake:
Sintaxe de consulta e operadores de consulta
Esta secção aborda as diferenças na sintaxe de consulta entre o Snowflake e o BigQuery.
SELECT
declaração
A maioria das declarações do Snowflake são compatíveis com o BigQuery.SELECT
A tabela seguinte contém uma lista de
diferenças menores.
Floco de neve | BigQuery | |
---|---|---|
|
|
|
Nota: o Snowflake suporta a criação e a referência de um alias na mesma declaração SELECT . |
|
|
|
|
Os alias e os identificadores do Snowflake não são sensíveis a maiúsculas e minúsculas por predefinição. Para preservar a capitalização, inclua os alias e os identificadores entre aspas (").
FROM
cláusula
Uma cláusula FROM
numa consulta especifica as tabelas, as vistas, a subconsulta ou as funções de tabela possíveis a usar numa declaração SELECT. Todas estas referências de tabelas são suportadas no BigQuery.
A tabela seguinte contém uma lista de pequenas diferenças.
Floco de neve | BigQuery | |
---|---|---|
|
WITH table1 AS |
|
|
|
|
|
Nota: o BigQuery não tem uma alternativa direta ao BEFORE do Snowflake que use um ID da declaração. O valor de timestamp não pode ser superior a 7 dias antes da data/hora atual. |
|
|
O BigQuery não suporta o conceito de ficheiros preparados. |
|
|
O BigQuery não oferece uma alternativa direta ao |
As tabelas do BigQuery podem ser referenciadas na cláusula FROM
através de:
[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 que usam
FOR SYSTEM_TIME AS OF
- Caminhos de campos ou qualquer caminho que seja resolvido para um campo num tipo de dados (ou seja, um
STRUCT
) - Matrizes reduzidas
WHERE
cláusula
As cláusulas do Snowflake
WHERE
e do BigQuery
WHERE
são idênticas, exceto no seguinte:
Floco de neve | BigQuery | |
---|---|---|
|
SELECT col1, col2 Nota: o BigQuery não suporta a sintaxe (+) para JOIN s |
JOIN
tipos
O Snowflake 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 "junção cruzada" implícita equivalente
O Snowflake e o BigQuery suportam a cláusulaON
andUSING
.
A tabela seguinte contém uma lista de pequenas diferenças.
Floco de neve | BigQuery | |
---|---|---|
|
Nota: no BigQuery, as cláusulas JOIN requerem uma condição JOIN, a menos que seja um CROSS JOIN ou uma das tabelas associadas seja um campo num tipo de dados ou numa matriz. |
|
Nota: ao contrário da saída de uma junção não lateral, a saída de uma junção lateral inclui apenas as linhas geradas a partir da vista inline. Não é necessário juntar as linhas do lado esquerdo às do lado direito, porque as linhas do lado esquerdo já foram tidas em conta ao serem transmitidas para a vista em linha. |
LATERAL JOIN s. |
WITH
cláusula
Uma cláusula BigQuery WITH
contém uma ou mais subconsultas com nome que são executadas sempre que uma declaração SELECT
subsequente faz referência às mesmas.
As cláusulas Snowflake WITH
comportam-se da mesma forma que o BigQuery, com a exceção de que
o BigQuery não suporta WITH RECURSIVE
.
GROUP BY
cláusula
As cláusulas GROUP BY
do Snowflake suportam
GROUP BY
,
GROUP BY ROLLUP
,
GROUP BY GROUPING SETS
,
e
GROUP BY CUBE
>,
enquanto as cláusulas GROUP BY
do BigQuery suportam
GROUP BY
,
GROUP BY ALL
,
GROUP BY ROLLUP
,
GROUP BY GROUPING SETS
,
e
GROUP BY CUBE
.
Floco de neve
HAVING
e BigQuery
HAVING
são
sinónimos. Tenha em atenção que a HAVING
ocorre após a GROUP BY
e a agregação, e antes da ORDER BY
.
Floco de neve | BigQuery | |
---|---|---|
|
|
|
|
|
|
Nota: o Snowflake permite até 128 conjuntos de agrupamentos no mesmo bloco de consulta |
|
|
Nota: o Snowflake permite até 7 elementos (128 conjuntos de agrupamento) em cada cubo |
|
ORDER BY
cláusula
Existem algumas diferenças menores entre as cláusulas Snowflake ORDER BY
e as cláusulas BigQuery ORDER BY
.
Floco de neve | BigQuery | |
---|---|---|
No Snowflake, os NULL s são classificados por último por predefinição (ordem ascendente). |
No BigQuery, os valores NULLS são classificados em primeiro lugar por predefinição (por ordem ascendente). |
|
Pode especificar se os valores NULL devem ser ordenados primeiro ou por último usando NULLS FIRST ou NULLS LAST , respetivamente. |
Não existe um equivalente para especificar se os valores NULL devem ser os primeiros ou os últimos no BigQuery. |
LIMIT/FETCH
cláusula
A cláusula
LIMIT/FETCH
no Snowflake restringe o número máximo de linhas devolvidas por uma declaração ou uma subconsulta.
LIMIT
(sintaxe do Postgres) e
FETCH
(sintaxe ANSI) produzem o mesmo resultado.
No Snowflake e no BigQuery, a aplicação de uma cláusula LIMIT
a uma consulta não afeta a quantidade de dados lidos.
Floco de neve | BigQuery | |
---|---|---|
Nota: NULL , string vazia ('') e $$$$ valores são aceites e tratados como "ilimitados". A utilização principal destina-se a conetores e controladores. |
Nota: o BigQuery não suporta o FETCH . LIMIT substitui FETCH .Nota: no BigQuery, OFFSET tem de ser usado em conjunto com um LIMIT count . Certifique-se de que define o valor count INT64 para o número mínimo de linhas ordenadas necessárias para o melhor desempenho. Ordenar todas as linhas de resultados desnecessariamente leva a um pior desempenho da execução de consultas. |
QUALIFY
cláusula
A cláusula
QUALIFY
no Snowflake permite-lhe filtrar resultados para funções de janela semelhantes ao que HAVING
faz com funções de agregação e cláusulas GROUP BY
.
Floco de neve | BigQuery | |
---|---|---|
|
A cláusula QUALIFY do Snowflake com uma função de estatísticas, como ROW_NUMBER() , COUNT() e com OVER PARTITION BY , é expressa no BigQuery como uma cláusula WHERE numa subconsulta que contém o valor de estatísticas.Usar ROW_NUMBER() :SELECT col1, col2
Usar ARRAY_AGG() , que suporta partições maiores:
|
Funções
As secções seguintes listam as funções do Snowflake 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 Snowflake com os respetivos equivalentes do BigQuery.
Floco de neve | BigQuery |
---|---|
Nota: DISTINCT não tem qualquer efeito |
|
Nota: DISTINCT não tem qualquer efeito |
Nota: o BigQuery não suporta APPROX_COUNT_DISTINCT com funções de janela |
Nota: o Snowflake não tem a opção de RESPECT NULLS |
Nota: o BigQuery não suporta APPROX_QUANTILES com funções de janela |
|
O BigQuery não suporta a capacidade de armazenar o estado intermédio quando prevê valores aproximados. |
|
O BigQuery não suporta a capacidade de armazenar o estado intermédio quando prevê valores aproximados. |
|
O BigQuery não suporta a capacidade de armazenar o estado intermédio quando prevê valores aproximados. |
Nota: se não for especificado nenhum parâmetro de número, a predefinição é 1. Os contadores devem ser significativamente superiores ao número. |
Nota: o BigQuery não suporta APPROX_TOP_COUNT com funções de janela. |
|
O BigQuery não suporta a capacidade de armazenar o estado intermédio quando prevê valores aproximados. |
|
O BigQuery não suporta a capacidade de armazenar o estado intermédio quando prevê valores aproximados. |
|
O BigQuery não suporta a capacidade de armazenar o estado intermédio quando prevê valores aproximados. |
|
Pode usar uma FUD personalizada para implementar MINHASH com k funções hash distintas. Outra abordagem para reduzir a variância em MINHASH é manterk dos valores mínimos de uma função de hash. Neste caso, o índice de Jaccard pode ser aproximado da seguinte forma:
|
|
É um sinónimo de APPROXIMATE_JACCARD_INDEX e pode ser implementado da mesma forma. |
|
|
|
Nota: o BigQuery AVG não realiza a conversão automática em STRING s. |
|
INTEGER mais próximo. |
|
Nota: o BigQuery não converte implicitamente colunas de carateres/texto para o tipo INTEGER mais próximo. |
|
Nota: o BigQuery não converte implicitamente colunas de carateres/texto para o tipo INTEGER mais próximo. |
Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
|
Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
|
Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
Para expressão numérica:
Para usar OVER , pode executar o seguinte (exemplo booleano fornecido):
|
|
|
|
|
|
|
|
|
|
O BigQuery não suporta uma alternativa direta à função GROUPING do Snowflake. Disponível através de uma função definida pelo utilizador. |
|
O BigQuery não suporta uma alternativa direta à função GROUPING_ID do Snowflake. Disponível através de uma função definida pelo utilizador. |
|
SELECT BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER] FROM t |
Nota: o Snowflake não permite especificar a precisão. |
Nota: o BigQuery não suporta HLL_COUNT… com funções de janela. Um utilizador não pode incluir várias expressões numa única função HLL_COUNT... . |
Nota: o Snowflake não permite especificar a precisão. |
HLL_COUNT.INIT (expression [, precision]) |
|
HLL_COUNT.MERGE_PARTIAL (esboço) |
|
|
|
O BigQuery não suporta uma alternativa direta à função HLL_EXPORT do Snowflake. |
|
O BigQuery não suporta uma alternativa direta à função HLL_IMPORT do Snowflake. |
|
O BigQuery não suporta uma alternativa direta à função KURTOSIS do Snowflake. |
|
|
Nota: o Snowflake não suporta a capacidade de IGNORE|RESPECT NULLS nem de LIMIT diretamente no ARRAY_AGG. |
|
|
|
|
Pode usar uma FDU personalizada para implementar MINHASH com k funções hash distintas. Outra abordagem para reduzir a variância em MINHASH é manter k dos valores mínimos de uma função de hash: SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS MINHASH
|
|
<code<select FROM ( SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TA AS t ORDER BY h LIMIT k UNION SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TB AS t ORDER BY h LIMIT k ) ORDER BY h LIMIT k |
|
|
|
Pode ponderar usar TO_JSON_STRING para converter um valor numa string formatada em JSON |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O BigQuery não suporta uma alternativa direta ao SKEW do Snowflake. |
|
|
|
|
|
|
|
|
Nota: o Snowflake suporta a capacidade de converter VARCHAR s em valores de vírgula flutuante. |
|
Nota: o Snowflake suporta a capacidade de converter VARCHAR s em valores de vírgula flutuante. |
|
Nota: o Snowflake suporta a capacidade de converter VARCHAR s em valores de vírgula flutuante. |
|
Nota: o Snowflake suporta a capacidade de converter VARCHAR s em valores de vírgula flutuante. |
|
O BigQuery também oferece as seguintes funções de agregação, análise agregada e agregação aproximada, que não têm um análogo direto no Snowflake:
Funções de expressões bit a bit
A tabela seguinte mostra os mapeamentos entre as funções de expressão bit a bit comuns do Snowflake e os respetivos equivalentes no BigQuery.
Se o tipo de dados de uma expressão não for INTEGER
, o Snowflake tenta converter para INTEGER
. No entanto, o BigQuery não tenta converter para INTEGER
.
Floco de neve | BigQuery |
---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
Nota: o Snowflake não suporta DISTINCT. |
|
Funções de expressão condicional
A tabela seguinte mostra mapeamentos entre expressões condicionais comuns do Snowflake e os respetivos equivalentes do BigQuery.
Floco de neve | BigQuery |
---|---|
|
|
Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
|
Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
|
BOOLOR Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
|
BOOLXOR Nota: o Snowflake permite que os valores numéricos, decimais e de vírgula flutuante sejam tratados como TRUE se não forem zero. |
O BigQuery não suporta uma alternativa direta à função BOOLXOR. |
|
|
Nota: o Snowflake requer, pelo menos, duas expressões. O BigQuery só requer um. |
|
|
DECODE do Snowflake. O utilizador tem de usar IS NULL em vez de = NULL para fazer corresponder expressões de seleção NULL com expressões de pesquisa NULL . |
|
O BigQuery não suporta uma alternativa direta à função EQUAL_NULL. |
|
|
|
|
|
|
|
|
|
O BigQuery não suporta uma alternativa direta à função IS [ NOT ] DISTINCT FROM. |
|
|
|
O BigQuery não suporta tipos de dados VARIANT . |
|
|
|
|
|
|
|
|
|
REGR... funções do Snowflake. |
|
Nota: o BigQuery não suporta uma alternativa direta às REGR... funções do Snowflake. |
|
|
Funções de contexto
A tabela seguinte mostra os mapeamentos entre funções de contexto comuns do Snowflake e os respetivos equivalentes do BigQuery.
Floco de neve | BigQuery |
---|---|
Nota: não é uma comparação direta. O Snowflake devolve o ID da conta, enquanto o BigQuery devolve o endereço de email do utilizador. |
|
Conceito não usado no BigQuery |
|
Isto devolve uma tabela de nomes de projetos. Não é uma comparação direta. |
|
Nota: o Snowflake não aplica "()" após o comando CURRENT_DATE para agir em conformidade com as normas ANSI. |
Nota: o CURRENT_DATE do BigQuery suporta a especificação opcional do fuso horário. |
Nota: a função INFORMATION_SCHEMA.SCHEMATA do BigQuery devolve referências de localização mais generalizadas do que a função CURRENT_REGION() do Snowflake. Não é uma comparação direta. |
|
Conceito não usado no BigQuery |
|
Isto devolve uma tabela de todos os conjuntos de dados (também denominados esquemas) disponíveis no projeto ou na região. Não é uma comparação direta. |
|
Conceito não usado no BigQuery |
|
Conceito não usado no BigQuery |
|
Nota: o INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar consultas por tipo de tarefa, tipo de início/fim, etc. |
|
Nota: o Snowflake permite uma precisão de segundos fracionada opcional. Os valores válidos variam entre 0 e 9 nanosegundos. O valor predefinido é 9. Para agir em conformidade com a ANSI, pode chamar esta função sem "()". |
|
Nota: o Snowflake permite uma precisão de segundos fracionada opcional. Os valores válidos variam entre 0 e 9 nanosegundos. O valor predefinido é 9. Para agir em conformidade com a ANSI, pode chamar esta função sem "()". Defina TIMEZONE como um parâmetro de sessão. |
Nota:
CURRENT_DATETIME devolve o tipo de dados DATETIME (não suportado no Snowflake). CURRENT_TIMESTAMP devolve o tipo de dados TIMESTAMP . |
INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar IDs de tarefas por tipo de tarefa, tipo de início/fim, etc. |
|
Nota: o Snowflake não aplica "()" após o comando CURRENT_USER para agir em conformidade com as normas ANSI. |
|
Conceito não usado no BigQuery |
|
|
|
|
Nota: o INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar IDs de tarefas por tipo de tarefa, tipo de início/fim, etc. |
Nota: o INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar IDs de tarefas por tipo de tarefa, tipo de início/fim, etc. |
|
Nota: o Snowflake não aplica "()" após o comando LOCALTIME para agir em conformidade com as normas ANSI. |
|
Nota:
CURRENT_DATETIME devolve o tipo de dados DATETIME (não suportado no Snowflake). CURRENT_TIMESTAMP devolve o tipo de dados TIMESTAMP . |
Funções de conversão
A tabela seguinte mostra os mapeamentos entre funções de conversão comuns do Snowflake e os respetivos equivalentes no BigQuery.
Tenha em atenção que as funções que parecem idênticas no Snowflake e no BigQuery podem devolver tipos de dados diferentes.
Snowflake | BigQuery |
---|---|
|
|
|
|
Nota: o Snowflake suporta a conversão HEX , BASE64 e UTF-8 . O Snowflake também suporta TO_BINARY através do tipo de dados VARIANT . O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: a conversão STRING predefinida do BigQuery usa a codificação UTF-8 . O Snowflake não tem uma opção para suportar a codificação BASE32 . |
Nota:
|
Nota:
|
Nota: pode encontrar os modelos de formato do Snowflake aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: a expressão de entrada do BigQuery pode ser formatada com FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME ou FORMAT_TIMESTAMP . |
Nota: o Snowflake suporta a capacidade de converter diretamente tipos INTEGER em tipos DATE . Pode encontrar os modelos de formato da Snowflake aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: a expressão de entrada do BigQuery pode ser formatada com FORMAT , FORMAT_DATETIME ou FORMAT_TIMESTAMP . |
Nota: pode encontrar os modelos de formato do Snowflake para os tipos de dados DECIMAL , NUMBER e NUMERIC aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: a expressão de entrada do BigQuery pode ser formatada através de FORMAT. |
Nota: pode encontrar os modelos de formato do Snowflake para os DOUBLE tipos de dados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: a expressão de entrada do BigQuery pode ser formatada através de FORMAT. |
|
O BigQuery não tem uma alternativa ao tipo de dados VARIANT do Snowflake. |
|
O BigQuery não tem uma alternativa ao tipo de dados VARIANT do Snowflake. |
Nota: pode encontrar os modelos de formato do Snowflake para os STRING tipos de dados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: o BigQuery não tem uma alternativa ao tipo de dados VARIANT do Snowflake. A expressão de entrada do BigQuery pode ser formatada com FORMAT , FORMAT_DATETIME , FORMAT_TIMESTAMP ou FORMAT_TIME . |
Nota: o BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Nota: a expressão de entrada do BigQuery pode ser formatada com FORMAT , FORMAT_DATE , FORMAT_DATETIME e FORMAT_TIME . O fuso horário pode ser incluído/não incluído através de parâmetros FORMAT_TIMESTAMP . |
|
O BigQuery não tem uma alternativa ao tipo de dados VARIANT do Snowflake. |
|
O BigQuery não tem uma alternativa ao tipo de dados VARIANT do Snowflake. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O BigQuery também oferece as seguintes funções de conversão, que não têm um análogo direto no Snowflake:
CODE_POINTS_TO_BYTES
CODE_POINTS_TO_STRING
FORMAT
FROM_BASE32
FROM_BASE64
FROM_HEX
SAFE_CONVERT_BYTES_TO_STRING
TO_BASE32
TO_CODE_POINTS
Funções de geração de dados
A tabela seguinte mostra mapeamentos entre funções comuns de geração de dados do Snowflake e os respetivos equivalentes no BigQuery.
Snowflake | BigQuery |
---|---|
|
O BigQuery não suporta uma comparação direta com a função NORMAL. |
|
Nota: o BigQuery não suporta a inicialização |
|
O BigQuery não suporta uma comparação direta com a função RANDSTR. |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
O BigQuery não suporta uma comparação direta com a função SEQ_. |
|
Nota:use UDFs persistentes para criar um equivalente à função UNIFORM do Snowflake. Exemplo aqui. |
UUID_STRING([uuid, name]) Nota: o Snowflake devolve 128 bits aleatórios. O Snowflake suporta UUIDs da versão 4 (aleatórios) e da versão 5 (denominados). |
Nota: o BigQuery devolve 122 bits aleatórios. O BigQuery só suporta UUIDs da versão 4. |
|
O BigQuery não suporta uma comparação direta com a função ZIPF. |
Funções de data e hora
A tabela seguinte mostra mapeamentos entre funções comuns de data e hora do Snowflake 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.
Snowflake | BigQuery |
---|---|
|
|
|
Nota: source_timezone é sempre UTC no BigQuery |
Nota: o Snowflake suporta datas negativas e de overflow. Por exemplo, DATE_FROM_PARTS(2000, 1 + 24, 1) devolve 1 de janeiro de 2002. Isto não é suportado no BigQuery. |
|
Nota: o Snowflake suporta os tipos de partes ISO do dia da semana, nanosegundo e segundo/milissegundo/microssegundo/nanosegundo da época. O BigQuery não. Consulte a lista completa de tipos de peças do Snowflake aqui
. |
Nota: o BigQuery suporta os tipos de partes week(<weekday>), microsecond e millisecond. O Snowflake não o faz. Veja a lista completa de tipos de partições do BigQuery aqui e aqui. |
Nota: o Snowflake suporta o tipo de parte de nanosegundos. O BigQuery não. Consulte a lista completa de tipos de peças do Snowflake aqui
. |
Nota: o BigQuery suporta os tipos de partes de semana(<weekday>), semana ISO e ano ISO. O Snowflake não o faz. |
|
|
Nota: o Snowflake suporta o cálculo da diferença entre dois tipos de data, hora e data/hora nesta função. |
Nota: o BigQuery suporta os tipos de partes de ano ISO e semana(<weekday>). |
|
|
Nota: o Snowflake suporta os tipos de partes ISO do dia da semana, nanosegundo e segundo/milissegundo/microssegundo/nanosegundo da época. O BigQuery não. Consulte a lista completa de tipos de peças do Snowflake aqui
. |
Nota: o BigQuery suporta os tipos de partes week(<weekday>), microsecond e millisecond. O Snowflake não o faz. Veja a lista completa de tipos de partições do BigQuery aqui e aqui. |
|
|
|
|
|
|
|
Nota: pode ser necessário reformatar dowString. Por exemplo, "su" no Snowflake torna-se "SUNDAY" no BigQuery. |
|
Nota: pode ser necessário reformatar dowString. Por exemplo, "su" no Snowflake torna-se "SUNDAY" no BigQuery. |
Nota: o Snowflake suporta tempos de overflow. Por exemplo, TIME_FROM_PARTS(0, 100, 0) devolve 01:40:00... Isto não é suportado no BigQuery. O BigQuery não suporta nanosegundos. |
|
|
Nota: o BigQuery não suporta uma comparação direta e exata com o TIME_SLICE do Snowflake. Use DATETINE_TRUNC , TIME_TRUNC , TIMESTAMP_TRUNC para o tipo de dados adequado. |
|
|
Nota: o Snowflake suporta o cálculo da diferença entre dois tipos de data, hora e data/hora nesta função. |
Nota: o BigQuery suporta os tipos de partes de ano ISO e semana(<weekday>). |
|
Nota: o BigQuery requer que as datas/horas sejam introduzidas como tipos STRING . Exemplo: "2008-12-25 15:30:00" |
|
|
Nota: o Snowflake suporta o cálculo da diferença entre dois tipos de data, hora e data/hora nesta função. |
Nota: o BigQuery suporta os tipos de partes de ano ISO e semana(<weekday>). |
Nota: o Snowflake suporta o tipo de parte de nanosegundos. O BigQuery não. Consulte a lista completa de tipos de peças do Snowflake aqui
. |
Nota: o BigQuery suporta os tipos de partes de semana(<weekday>), semana ISO e ano ISO. O Snowflake não o faz. |
|
|
O BigQuery também oferece as seguintes funções de data e hora, que não têm um análogo direto no Snowflake:
Esquema de informações e funções de tabela
O BigQuery não suporta conceptualmente muitas das funções de esquema de informações e de tabelas do Snowflake. O Snowflake oferece o seguinte esquema de informações e funções de tabela, que não têm um análogo direto no BigQuery:
AUTOMATIC_CLUSTERING_HISTORY
COPY_HISTORY
DATA_TRANSFER_HISTORY
DATABASE_REFRESH_HISTORY
DATABASE_REFRESH_PROGRESS, DATABASE_REFRESH_PROGRESS_BY_JOB
DATABASE_STORAGE_USAGE_HISTORY
EXTERNAL_TABLE_FILES
EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY
LOGIN_HISTORY
,LOGIN_HISTORY_BY_USER
MATERIALIZED_VIEW_REFRESH_HISTORY
PIPE_USAGE_HISTORY
REPLICATION_USAGE_HISTORY
STAGE_STORAGE_USAGE_HISTORY
TASK_DEPENDENTS
VALIDATE_PIPE_LOAD
WAREHOUSE_LOAD_HISTORY
WAREHOUSE_METERING_HISTORY
Segue-se uma lista de funções de tabela e de esquema de informações do BigQuery e do Snowflake associadas.
Snowflake | BigQuery |
---|---|
QUERY_HISTORY QUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_* Nota: não é uma alternativa direta. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_* Nota: não é uma alternativa direta. |
O BigQuery oferece o seguinte esquema de informações e funções de tabela, que não têm um análogo direto no Snowflake:
INFORMATION_SCHEMA.SCHEMATA
INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.VIEWS
Funções numéricas
A tabela seguinte mostra os mapeamentos entre as funções numéricas comuns do Snowflake e os respetivos equivalentes no BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nota: o CEIL do BigQuery não suporta a capacidade de indicar a precisão ou a escala. ROUND não lhe permite especificar o arredondamento para cima. |
|
|
|
|
|
|
|
|
|
|
|
O BigQuery não tem uma alternativa direta para o FACTORIAL do Snowflake. Usar uma função definida pelo utilizador. |
|
Nota: o FLOOR do BigQuery não suporta a capacidade de indicar a precisão ou a escala. ROUND não lhe permite especificar o arredondamento para cima. TRUNC funciona de forma sinónima para números positivos, mas não para números negativos, uma vez que avalia o valor absoluto. |
|
Nota: não é uma correspondência exata, mas é suficientemente próxima. |
|
|
|
Nota:a base predefinida para LOG é 10. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nota: o valor devolvido do BigQuery tem de ser inferior à expressão. Não suporta igual a. |
O BigQuery também oferece as seguintes funções matemáticas, que não têm um análogo direto no Snowflake:
IS_INF
IS_NAN
IEEE_DIVIDE
DIV
SAFE_DIVIDE
SAFE_MULTIPLY
SAFE_NEGATE
SAFE_ADD
SAFE_SUBTRACT
RANGE_BUCKET
Funções de dados semiestruturados
Snowflake | BigQuery |
---|---|
ARRAY_APPEND |
Função definida pelo utilizador personalizada |
ARRAY_CAT |
ARRAY_CONCAT |
ARRAY_COMPACT |
Função definida pelo utilizador personalizada |
ARRAY_CONSTRUCT |
[ ] |
ARRAY_CONSTRUCT_COMPACT |
Função definida pelo utilizador personalizada |
ARRAY_CONTAINS |
Função definida pelo utilizador personalizada |
ARRAY_INSERT |
Função definida pelo utilizador personalizada |
ARRAY_INTERSECTION |
Função definida pelo utilizador personalizada |
ARRAY_POSITION |
Função definida pelo utilizador personalizada |
ARRAY_PREPEND |
Função definida pelo utilizador personalizada |
ARRAY_SIZE |
ARRAY_LENGTH |
ARRAY_SLICE |
Função definida pelo utilizador personalizada |
ARRAY_TO_STRING |
ARRAY_TO_STRING |
ARRAYS_OVERLAP |
Função definida pelo utilizador personalizada |
AS_<object_type> |
CAST |
AS_ARRAY |
CAST |
AS_BINARY |
CAST |
AS_BOOLEAN |
CAST |
AS_CHAR , AS_VARCHAR |
CAST |
AS_DATE |
CAST |
AS_DECIMAL , AS_NUMBER |
CAST |
AS_DOUBLE , AS_REAL |
CAST |
AS_INTEGER |
CAST |
AS_OBJECT |
CAST |
AS_TIME |
CAST |
AS_TIMESTAMP_* |
CAST |
CHECK_JSON |
Função definida pelo utilizador personalizada |
CHECK_XML |
Função definida pelo utilizador personalizada |
FLATTEN |
UNNEST |
GET |
Função definida pelo utilizador personalizada |
GET_IGNORE_CASE |
Função definida pelo utilizador personalizada |
|
Função definida pelo utilizador personalizada |
IS_<object_type> |
Função definida pelo utilizador personalizada |
IS_ARRAY |
Função definida pelo utilizador personalizada |
IS_BINARY |
Função definida pelo utilizador personalizada |
IS_BOOLEAN |
Função definida pelo utilizador personalizada |
IS_CHAR , IS_VARCHAR |
Função definida pelo utilizador personalizada |
IS_DATE , IS_DATE_VALUE |
Função definida pelo utilizador personalizada |
IS_DECIMAL |
Função definida pelo utilizador personalizada |
IS_DOUBLE , IS_REAL |
Função definida pelo utilizador personalizada |
IS_INTEGER |
Função definida pelo utilizador personalizada |
IS_OBJECT |
Função definida pelo utilizador personalizada |
IS_TIME |
Função definida pelo utilizador personalizada |
IS_TIMESTAMP_* |
Função definida pelo utilizador personalizada |
OBJECT_CONSTRUCT |
Função definida pelo utilizador personalizada |
OBJECT_DELETE |
Função definida pelo utilizador personalizada |
OBJECT_INSERT |
Função definida pelo utilizador personalizada |
PARSE_JSON |
JSON_EXTRACT |
PARSE_XML |
Função definida pelo utilizador personalizada |
STRIP_NULL_VALUE |
Função definida pelo utilizador personalizada |
STRTOK_TO_ARRAY |
SPLIT |
TRY_PARSE_JSON |
Função definida pelo utilizador personalizada |
TYPEOF |
Função definida pelo utilizador personalizada |
XMLGET |
Função definida pelo utilizador personalizada |
Funções de string e binárias
Snowflake | BigQuery |
---|---|
|
|
ASCII |
|
BASE64_DECODE_BINARY |
|
BASE64_DECODE_STRING |
|
BASE64_ENCODE |
|
BIT_LENGTH |
CHARACTER_LENGTH |
|
|
CHR,CHAR |
|
COLLATE |
Função definida pelo utilizador personalizada |
COLLATION |
Função definida pelo utilizador personalizada |
COMPRESS |
Função definida pelo utilizador personalizada |
|
CONCAT (...) do BigQuery suporta a concatenação de qualquer número de strings. |
CONTAINS |
Função definida pelo utilizador personalizada |
DECOMPRESS_BINARY |
Função definida pelo utilizador personalizada |
DECOMPRESS_STRING |
Função definida pelo utilizador personalizada |
EDITDISTANCE |
EDIT_DISTANCE |
ENDSWITH |
Função definida pelo utilizador personalizada |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
Função definida pelo utilizador personalizada |
ILIKE ANY |
Função definida pelo utilizador personalizada |
INITCAP |
INITCAP |
INSERT |
Função definida pelo utilizador personalizada |
LEFT |
Função definida pelo utilizador |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
Função definida pelo utilizador personalizada |
LIKE ANY |
Função definida pelo utilizador personalizada |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
Função definida pelo utilizador personalizada |
OCTET_LENGTH |
Função definida pelo utilizador personalizada |
PARSE_IP |
Função definida pelo utilizador personalizada |
PARSE_URL |
Função definida pelo utilizador personalizada |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
Função definida pelo utilizador |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
Função definida pelo utilizador personalizada |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
Função definida pelo utilizador personalizada |
SHA2,SHA2_HEX |
Função definida pelo utilizador personalizada |
SHA2_BINARY |
Função definida pelo utilizador personalizada |
SOUNDEX |
Função definida pelo utilizador personalizada |
SPACE |
Função definida pelo utilizador personalizada |
SPLIT |
SPLIT |
SPLIT_PART |
Função definida pelo utilizador personalizada |
SPLIT_TO_TABLE |
Função definida pelo utilizador personalizada |
STARTSWITH |
Função definida pelo utilizador personalizada |
STRTOK |
Nota: o argumento de string delimitador completo é usado como um único delimitador. O delimitador predefinido é uma vírgula. |
STRTOK_SPLIT_TO_TABLE |
Função definida pelo utilizador personalizada |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
Função definida pelo utilizador personalizada |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
Função definida pelo utilizador personalizada |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
Função definida pelo utilizador personalizada |
|
UPPER |
Funções de string (expressões regulares)
Snowflake | BigQuery |
---|---|
REGEXP |
|
REGEXP_COUNT |
Se position estiver especificado:
Nota: o BigQuery oferece suporte para expressões regulares através da biblioteca re2. Consulte a documentação da biblioteca para ver a respetiva sintaxe de expressões regulares. |
REGEXP_INSTR |
Se position for especificado:
Se occurrence estiver especificado:
Nota: o BigQuery oferece suporte para expressões regulares através da biblioteca re2. Consulte a documentação da biblioteca para ver a respetiva sintaxe de expressões regulares. |
|
|
REGEXP_REPLACE |
Se replace_string estiver especificado:
Se position estiver especificado:
Nota: o BigQuery oferece suporte para expressões regulares através da biblioteca re2. Consulte a documentação da biblioteca para ver a respetiva sintaxe de expressões regulares. |
REGEXP_SUBSTR |
Se position estiver especificado:
Se occurrence estiver especificado:
Nota: o BigQuery oferece suporte para expressões regulares através da biblioteca re2. Consulte a documentação da biblioteca para ver a respetiva sintaxe de expressões regulares. |
RLIKE |
|
Funções do sistema
Snowflake | BigQuery |
---|---|
SYSTEM$ABORT_SESSION |
Função definida pelo utilizador personalizada |
SYSTEM$ABORT_TRANSACTION |
Função definida pelo utilizador personalizada |
SYSTEM$CANCEL_ALL_QUERIES |
Função definida pelo utilizador personalizada |
SYSTEM$CANCEL_QUERY |
Função definida pelo utilizador personalizada |
SYSTEM$CLUSTERING_DEPTH |
Função definida pelo utilizador personalizada |
SYSTEM$CLUSTERING_INFORMATION |
Função definida pelo utilizador personalizada |
SYSTEM$CLUSTERING_RATIO — Deprecated |
Função definida pelo utilizador personalizada |
SYSTEM$CURRENT_USER_TASK_NAME |
Função definida pelo utilizador personalizada |
SYSTEM$DATABASE_REFRESH_HISTORY |
Função definida pelo utilizador personalizada |
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB |
Função definida pelo utilizador personalizada |
SYSTEM$GET_AWS_SNS_IAM_POLICY |
Função definida pelo utilizador personalizada |
SYSTEM$GET_PREDECESSOR_RETURN_VALUE |
Função definida pelo utilizador personalizada |
SYSTEM$LAST_CHANGE_COMMIT_TIME |
Função definida pelo utilizador personalizada |
SYSTEM$PIPE_FORCE_RESUME |
Função definida pelo utilizador personalizada |
SYSTEM$PIPE_STATUS |
Função definida pelo utilizador personalizada |
SYSTEM$SET_RETURN_VALUE |
Função definida pelo utilizador personalizada |
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS |
Função definida pelo utilizador personalizada |
SYSTEM$STREAM_GET_TABLE_TIMESTAMP |
Função definida pelo utilizador personalizada |
SYSTEM$STREAM_HAS_DATA |
Função definida pelo utilizador personalizada |
SYSTEM$TASK_DEPENDENTS_ENABLE |
Função definida pelo utilizador personalizada |
SYSTEM$TYPEOF |
Função definida pelo utilizador personalizada |
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS |
Função definida pelo utilizador personalizada |
SYSTEM$WAIT |
Função definida pelo utilizador personalizada |
SYSTEM$WHITELIST |
Função definida pelo utilizador personalizada |
SYSTEM$WHITELIST_PRIVATELINK |
Função definida pelo utilizador personalizada |
Funções de tabela
Snowflake | BigQuery | |
---|---|---|
GENERATOR |
Função definida pelo utilizador personalizada | |
GET_OBJECT_REFERENCES |
Função definida pelo utilizador personalizada | |
RESULT_SCAN |
Função definida pelo utilizador personalizada | |
VALIDATE |
Função definida pelo utilizador personalizada |
Funções utilitárias e hash
Snowflake | BigQuery | |
---|---|---|
GET_DDL |
Pedido de funcionalidade | |
HASH |
HASH é uma função proprietária específica do Snowflake. Não é possível traduzir sem conhecer a lógica subjacente usada pelo Snowflake. |
Funções de janela
Snowflake | BigQuery | |
---|---|---|
CONDITIONAL_CHANGE_EVENT |
Função definida pelo utilizador personalizada | |
CONDITIONAL_TRUE_EVENT |
Função definida pelo utilizador personalizada | |
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
NTH_VALUE |
NTH_VALUE |
|
NTILE |
NTILE |
|
PERCENT_RANK |
PERCENT_RANK |
|
RANK |
RANK |
|
RATIO_TO_REPORT |
Função definida pelo utilizador personalizada | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
Função definida pelo utilizador personalizada |
O BigQuery também suporta
SAFE_CAST
(expression
AS typename), que devolve NULL se o BigQuery não conseguir executar um
molde (por exemplo,
SAFE_CAST
("apple"
AS INT64) devolve NULL).
Operadores
As secções seguintes apresentam os operadores do Snowflake e os respetivos equivalentes no BigQuery.
Operadores aritméticos
A tabela seguinte mostra os mapeamentos entre os operadores aritméticos do Snowflake com os respetivos equivalentes no BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
Nota: o BigQuery suporta o sinal de menos unário padrão, mas não converte números inteiros no formato de string para o tipo INT64 , NUMERIC ou FLOAT64 . |
|
|
|
|
|
|
|
|
|
|
Para ver os detalhes da escala e da precisão do Snowflake quando realizar operações aritméticas, consulte a documentação do Snowflake.
Operadores de comparação
Os operadores de comparação do Snowflake e os operadores de comparação do BigQuery são iguais.
Operadores lógicos/booleanos
Os operadores lógicos/booleanos do Snowflake e os operadores lógicos/booleanos do BigQuery são iguais.
Operadores de conjuntos
A tabela seguinte mostra mapeamentos entre os operadores de conjuntos do Snowflake e os respetivos equivalentes no BigQuery.
Snowflake | BigQuery |
---|---|
|
INTERSECT DISTINCT
|
Nota: MINUS e EXCEPT são sinónimos. |
|
|
|
Operadores de subconsulta
A tabela seguinte mostra os mapeamentos entre os operadores de subconsulta do Snowflake e os respetivos equivalentes no BigQuery.
Snowflake | BigQuery |
---|---|
|
O BigQuery não suporta uma alternativa direta ao ALL/ANY do Snowflake. |
|
|
|
|
|
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. |
Sintaxe DML
Esta secção aborda as diferenças na sintaxe da linguagem de gestão de dados entre o Snowflake e o BigQuery.
INSERT
declaração
O Snowflake 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 Snowflake são compatíveis com o BigQuery.INSERT
A tabela seguinte mostra as exceções.
Snowflake | BigQuery |
---|---|
Nota: o BigQuery não suporta a inserção de objetos JSON com uma INSERT declaração. |
VALUES (DEFAULT [, ...]) Nota: o BigQuery não suporta uma alternativa direta à função OVERWRITE do Snowflake. Em alternativa, use DELETE . |
|
|
... Nota:
<intoClause> representa o INSERT statement padrão, indicado acima. |
O BigQuery não suporta INSERTs de várias tabelas condicionais e incondicionais. |
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 Snowflake. Por exemplo:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
COPY
declaração
O Snowflake suporta a cópia de dados de ficheiros de fases para uma tabela existente e de uma tabela para uma fase interna com nome, uma fase externa com nome e uma localização externa (Amazon S3, Google Cloud Storage ou Microsoft Azure).
O BigQuery não usa o comando SQL COPY
para carregar dados, mas pode usar qualquer uma das várias ferramentas e opções não SQL para carregar dados em tabelas do BigQuery. Também pode usar destinos de pipelines de dados
fornecidos no
Apache Spark
ou no
Apache Beam
para escrever dados no BigQuery.
UPDATE
declaração
A maioria das declarações do Snowflake UPDATE
é compatível com o BigQuery. A tabela seguinte mostra as exceções.
Snowflake | BigQuery | |
---|---|---|
|
Nota: todas as declarações UPDATE no BigQuery requerem uma palavra-chave WHERE , seguida de uma condição. |
DELETE
e TRUNCATE TABLE
extratos
As declarações DELETE
e TRUNCATE TABLE
são ambas formas de remover linhas de uma tabela sem afetar o esquema ou os índices da tabela.
No Snowflake, tanto o DELETE
como o TRUNCATE TABLE
mantêm os dados eliminados através da funcionalidade Time Travel do Snowflake para fins de recuperação durante o período de retenção de dados.
No entanto, o comando DELETE não elimina o histórico de carregamento de ficheiros externos nem os metadados de carregamento.
No BigQuery, a declaração DELETE
tem de ter uma cláusula WHERE
. Para mais informações sobre DELETE
no BigQuery, consulte os
exemplos do BigQueryDELETE
na documentação da DML.
Snowflake | BigQuery |
---|---|
|
Nota: as declarações do BigQuery DELETE requerem uma cláusula WHERE . |
MERGE
declaração
A declaração MERGE
pode combinar operações INSERT
, UPDATE
e DELETE
numa única declaração "upsert" e realizar as operações automaticamente. A operação MERGE
tem de corresponder, no máximo, a uma linha de origem para cada linha de destino.
As tabelas do BigQuery estão limitadas a 1000 declarações DML por dia, pelo que deve consolidar de forma ideal as declarações INSERT, UPDATE e DELETE numa única declaração MERGE, conforme mostrado na tabela seguinte:
Snowflake | BigQuery |
---|---|
Nota: o Snowflake suporta um parâmetro de sessão ERROR_ON_NONDETERMINISTIC_MERGE para processar resultados não determinísticos. |
Nota: se atualizar todas as colunas, tem de as indicar todas. |
GET
e LIST
extratos
A declaração GET
transfere ficheiros de dados de um dos seguintes estágios do Snowflake para um
diretório/pasta local num computador cliente:
- Fase interna com nome
- Fase interna de uma tabela especificada
- Fase interna para o utilizador atual
A declaração LIST
(LS) devolve uma lista de ficheiros que foram preparados (ou seja, carregados
a partir de um sistema de ficheiros local ou descarregados de uma tabela) numa das seguintes
preparações do Snowflake:
- Fase interna com nome
- Palco externo com nome
- Preparação para uma tabela especificada
- Fase para o utilizador atual
O BigQuery não suporta o conceito de preparação e não tem equivalentes de GET
e LIST
.
PUT
e REMOVE
extratos
A declaração PUT
carrega (ou seja, prepara) ficheiros de dados de um diretório/pasta local num computador cliente para uma das seguintes preparações do Snowflake:
- Fase interna com nome
- Fase interna de uma tabela especificada
- Fase interna para o utilizador atual
A declaração REMOVE
(RM)
remove ficheiros que foram preparados numa das seguintes
fases internas do Snowflake:
- Fase interna com nome
- Preparação para uma tabela especificada
- Fase para o utilizador atual
O BigQuery não suporta o conceito de preparação e não tem equivalentes de PUT
e REMOVE
.
Sintaxe DDL
Esta secção aborda as diferenças na sintaxe da linguagem de definição de dados entre o Snowflake e o BigQuery.
LDD de base de dados, esquema e partilha
A maioria da terminologia do Snowflake corresponde à do BigQuery, exceto que a base de dados do Snowflake é semelhante ao conjunto de dados do BigQuery. Consulte o mapeamento detalhado da terminologia do Snowflake para o BigQuery.
CREATE DATABASE
declaração
O Snowflake suporta a criação e a gestão de uma base de dados através de comandos de gestão de bases de dados , enquanto o BigQuery oferece várias opções, como a utilização da consola, da CLI, das bibliotecas de cliente, etc., para criar conjuntos de dados. Esta secção vai usar comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças.
Snowflake | BigQuery |
---|---|
Nota: o Snowflake fornece estes requisitos para a atribuição de nomes a bases de dados. Permite apenas 255 carateres no nome. |
Nota: o BigQuery tem requisitos de nomenclatura de conjuntos de dados semelhantes aos do Snowflake, exceto que permite 1024 carateres no nome. |
|
A substituição do conjunto de dados não é suportada no BigQuery. |
|
A criação de conjuntos de dados temporários não é suportada no BigQuery. |
|
Conceito não suportado no BigQuery |
|
A clonagem de conjuntos de dados ainda não é suportada no BigQuery. |
|
A viagem no tempo ao nível do conjunto de dados não é suportada no BigQuery. No entanto, a viagem no tempo para resultados de tabelas e consultas é suportada. |
|
A ordenação na DDL não é suportada no BigQuery. |
|
|
|
A criação de conjuntos de dados partilhados não é suportada no BigQuery. No entanto, os utilizadores podem partilhar o conjunto de dados através da consola/IU assim que o conjunto de dados for criado. |
Nota: o Snowflake oferece a opção de manutenção automática em segundo plano das vistas materializadas na base de dados secundária, que não é suportada no BigQuery. |
|
O BigQuery também oferece as seguintes opções de comando bq mk
, que não têm um análogo direto no Snowflake:
--location <dataset_location>
--default_table_expiration <time_in_seconds>
--default_partition_expiration <time_in_seconds>
ALTER DATABASE
declaração
Esta secção vai usar comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças nas declarações ALTER.
Snowflake | BigQuery |
---|---|
|
A mudança do nome de conjuntos de dados não é suportada no BigQuery, mas a cópia de conjuntos de dados é suportada. |
|
A troca de conjuntos de dados não é suportada no BigQuery. |
|
A gestão da retenção e da organização de dados ao nível do conjunto de dados não é suportada no BigQuery. |
|
|
|
Conceito não suportado no BigQuery. |
|
Conceito não suportado no BigQuery. |
|
Conceito não suportado no BigQuery. |
|
Conceito não suportado no BigQuery. |
|
Conceito não suportado no BigQuery. |
|
Conceito não suportado no BigQuery. |
|
Conceito não suportado no BigQuery. |
DROP DATABASE
declaração
Esta secção vai usar o comando da CLI do BigQuery correspondente ao comando do Snowflake para abordar a diferença na declaração DROP.
Snowflake | BigQuery |
---|---|
Nota: no Snowflake, a eliminação de uma base de dados não a remove permanentemente do sistema. É retida uma versão da base de dados eliminada durante o número de dias especificado pelo parâmetro DATA_RETENTION_TIME_IN_DAYS para a base de dados. |
-r consiste em remover todos os objetos no conjunto de dados
-d indica o conjunto de dadosNota: no BigQuery, a eliminação de um conjunto de dados é permanente. Além disso, a eliminação em cascata não é suportada ao nível do conjunto de dados, uma vez que todos os dados e objetos no conjunto de dados são eliminados. |
O Snowflake também suporta o comando
UNDROP DATASET
que restaura a versão mais recente de conjuntos de dados eliminados. Atualmente, esta opção não é suportada no BigQuery ao nível do conjunto de dados.
USE DATABASE
declaração
O Snowflake oferece a opção de definir a base de dados para uma sessão de utilizador através do comando USE DATABASE
. Isto elimina a necessidade de especificar nomes de objetos totalmente qualificados em comandos SQL. O BigQuery não oferece nenhuma alternativa ao comando USE DATABASE do Snowflake.
SHOW DATABASE
declaração
Esta secção vai usar o comando da CLI do BigQuery correspondente ao comando do Snowflake para abordar a diferença na declaração SHOW.
Snowflake | BigQuery |
---|---|
Nota: o Snowflake oferece uma única opção para listar e mostrar detalhes sobre todas as bases de dados, incluindo as bases de dados eliminadas que estão dentro do período de retenção. |
bq ls --format=prettyjsone / ou
Nota: no BigQuery, o comando ls fornece apenas nomes de conjuntos de dados e informações básicas, e o comando show fornece detalhes como a data/hora da última modificação, as LCAs e as etiquetas de um conjunto de dados. O BigQuery também fornece mais detalhes sobre os conjuntos de dados através do Information Schema. |
Nota: com a opção TERSE, o Snowflake permite apresentar apenas informações/campos específicos sobre conjuntos de dados. |
Conceito não suportado no BigQuery. |
O conceito de viagem no tempo não é suportado no BigQuery ao nível do conjunto de dados. | |
SHOW DATABASES
|
A filtragem de resultados por nomes de conjuntos de dados não é suportada no BigQuery. No entanto, a filtragem por etiquetas é suportada. |
SHOW DATABASES
Nota: por predefinição, o Snowflake não limita o número de resultados. No entanto, o valor de LIMIT não pode exceder 10 000. |
Nota: por predefinição, o BigQuery só apresenta 50 resultados. |
O BigQuery também oferece as seguintes opções de comando bq
, que não têm um análogo direto no Snowflake:
- bq ls --format=pretty: devolve resultados formatados básicos
- *bq ls -a: *Returns only anonymous datasets (the ones starting with an underscore)
- bq ls --all: devolve todos os conjuntos de dados, incluindo os anónimos
- bq ls --filter labels.key:value: devolve resultados filtrados pela etiqueta do conjunto de dados
- bq ls --d: exclui conjuntos de dados anónimos dos resultados
- bq show --format=pretty: devolve resultados formatados básicos detalhados para todos os conjuntos de dados
Gestão do SCHEMA
O Snowflake oferece vários comandos de gestão de esquemas semelhantes aos comandos de gestão de bases de dados. Este conceito de criação e gestão de esquemas não é suportado no BigQuery.
No entanto, o BigQuery permite-lhe especificar o esquema de uma tabela quando carrega dados para uma tabela e quando cria uma tabela vazia. Em alternativa, pode usar a deteção automática de esquemas para formatos de dados suportados.
Gestão do SHARE
O Snowflake oferece vários comandos de gestão de partilha semelhantes aos comandos de gestão de bases de dados e esquemas. Este conceito de criar e gerir a partilha não é suportado no BigQuery.
DDL de tabelas, vistas e sequências
CREATE TABLE
declaração
A maioria das declarações CREATE TABLE
do Snowflake é compatível com o BigQuery, exceto os seguintes elementos de sintaxe, que não são usados no BigQuery:
Snowflake | BigQuery |
---|---|
Nota: as restrições UNIQUE e PRIMARY KEY são informativas e não são aplicadas pelo sistema Snowflake. |
|
onde table_constraints estão:
Nota:
UNIQUE e as restrições PRIMARY KEY são informativas e não são aplicadas pelo sistema Snowflake. |
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é quatro colunas. |
|
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. |
Nota:no Snowflake, a definição BACKUP NO é especificada para "poupar tempo de processamento ao criar imagens instantâneas e restaurar a partir de imagens instantâneas, e para 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 qualquer efeito no tempo de processamento nem no armazenamento faturado. |
onde table_attributes estão:
|
O BigQuery suporta o clustering, o que permite armazenar chaves por ordem alfabética. |
|
|
|
|
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 Snowflake:
Para mais informações sobre o CREATE TABLE
no BigQuery, consulte os
exemplos de declarações CREATE TABLE
na documentação de DDL.
ALTER TABLE
declaração
Esta secção vai usar comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças nas declarações ALTER para tabelas.
Snowflake | BigQuery |
---|---|
|
|
|
A troca de tabelas não é suportada no BigQuery. |
|
A gestão da ordenação de dados para tabelas não é suportada no BigQuery. |
|
|
|
|
Além disso, o Snowflake oferece opções de clustering, colunas e restrições para alterar tabelas que não são suportadas pelo BigQuery.
DROP TABLE
e UNDROP TABLE
extratos
Esta secção vai usar o comando da CLI do BigQuery correspondente ao comando do Snowflake para abordar a diferença nas declarações DROP e UNDROP.
Snowflake | BigQuery |
---|---|
Nota: no Snowflake, a eliminação de uma tabela não a remove permanentemente do sistema. É retida uma versão da tabela eliminada durante o número de dias especificado pelo DATA_RETENTION_TIME_IN_DAYS parâmetro para a base de dados. |
-f serve para ignorar a confirmação para execução -d indica o conjunto de dados Nota: no BigQuery, a eliminação de uma tabela também não é permanente, mas é mantida uma captura de ecrã apenas durante 7 dias. |
|
Nota: no BigQuery, tem de determinar primeiro uma indicação de tempo UNIX de quando a tabela existia (em milissegundos). Em seguida, copie a tabela nessa data/hora para uma nova tabela. A nova tabela tem de ter um nome diferente do da tabela eliminada. |
CREATE EXTERNAL TABLE
declaração
O BigQuery permite criar tabelas externas permanentes e temporárias e consultar dados diretamente a partir de:
O Snowflake permite criar uma tabela externa permanente que, quando consultada, lê dados de um conjunto de um ou mais ficheiros num estágio externo especificado.
Esta secção vai usar o comando da CLI do BigQuery correspondente ao comando do Snowflake para abordar as diferenças na declaração CREATE EXTERNAL TABLE.
Snowflake | BigQuery |
---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
Nota: o Snowflake permite preparar os ficheiros que contêm dados a serem lidos e especificar opções de tipo de formato para tabelas externas. O BigQuery suporta todos os tipos de formatos do Snowflake, exceto o tipo XML: CSV, JSON, AVRO, PARQUET e ORC. |
Nota: o BigQuery permite criar uma tabela permanente associada à sua origem de dados através de um ficheiro de definição de tabela [1], um ficheiro de esquema JSON [2] ou uma definição de esquema inline [3]. A preparação de ficheiros para leitura e a especificação de opções de tipo de formato não são suportadas no BigQuery. |
|
Nota: atualmente, o BigQuery não suporta nenhuma das opções de parâmetros opcionais fornecidas pelo Snowflake para criar tabelas externas. Para a partição, o BigQuery suporta a utilização da pseudocoluna _FILE_NAME para criar tabelas/vistas particionadas com base nas tabelas externas. Para mais informações, consulte o artigo
Consulte a pseudocoluna _FILE_NAME . |
Além disso, o BigQuery também suporta consultar dados particionados externamente nos formatos AVRO, PARQUET, ORC, JSON e CSV armazenados no Google Cloud Storage através de um esquema de partição de colmeias predefinido.
CREATE VIEW
declaração
A tabela seguinte mostra os equivalentes entre o Snowflake e o BigQuery para a declaração CREATE VIEW
.
Snowflake | BigQuery |
---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
Não suportado | CREATE VIEW IF NOT EXISTS
|
|
No BigQuery, para criar uma vista, todos os objetos referenciados têm de existir. O BigQuery permite consultar origens de dados externas. |
CREATE SEQUENCE
declaração
As sequências não são usadas no BigQuery. Isto pode ser conseguido da seguinte forma em lote. Para mais informações sobre chaves substitutas e dimensões que mudam lentamente (SCD), consulte os seguintes guias:
|
---|
LDD de carregamento e descarga de dados
O Snowflake suporta o carregamento e o descarregamento de dados através de comandos de gestão de fases, formatos de ficheiros e pipelines. O BigQuery também oferece várias opções, como bq load, Serviço de transferência de dados do BigQuery, bq extract, etc. Esta secção realça as diferenças na utilização destas metodologias para carregar e descarregar dados.
LDD da conta e da sessão
Os conceitos de conta e sessão do Snowflake não são suportados no BigQuery. O BigQuery permite a gestão de contas através do Cloud IAM a todos os níveis. Além disso, as transações com várias declarações ainda não são suportadas no BigQuery.
Funções definidas pelo utilizador (UDF)
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 valor
O Snowflake e o BigQuery suportam FDUs através de expressões SQL e código JavaScript.
Consulte o repositório do GitHub GoogleCloudPlatform/bigquery-utils/ 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 FDU de SQL entre o Snowflake e o BigQuery.
Snowflake | BigQuery |
---|---|
|
Nota: no SQL UDF do BigQuery, o 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. |
|
Nota:no SQL UDF do BigQuery, a devolução do tipo de tabela não é suportada atualmente, mas está nos planos do produto e vai estar disponível em breve. No entanto, o BigQuery suporta a devolução de ARRAY do tipo STRUCT. |
Nota: o Snowflake oferece uma opção segura para restringir a definição e os detalhes das UDF apenas a utilizadores autorizados (ou seja, utilizadores aos quais é concedida a função proprietária da vista). |
Nota: a segurança das funções não é um parâmetro configurável no BigQuery. O BigQuery suporta a criação de funções e autorizações de IAM para restringir o acesso aos dados subjacentes e à definição de funções. |
|
Nota: o comportamento das funções para entradas nulas é processado implicitamente no BigQuery e não tem de ser especificado como uma opção separada. |
|
Nota:a volatilidade da função não é um parâmetro configurável no BigQuery. Toda a volatilidade das UDFs do BigQuery é equivalente à volatilidade do Snowflake (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: a utilização de aspas simples ou de uma sequência de carateres, como as aspas de dólar ($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression. |
|
Note:Adding comments or descriptions in UDFs is currently not supported in BigQuery. |
|
Note: BigQuery supports using ANY TYPE as argument type. The function will accept an input of any type for this argument. For more information, see templated parameter in BigQuery. |
BigQuery also supports the CREATE FUNCTION IF NOT EXISTS
statement
which treats the query as successful and takes no action if a function with the
same name already exists.
BigQuery's CREATE FUNCTION
statement also supports creating
TEMPORARY or TEMP functions
, which do
not have a Snowflake equivalent. See
calling UDFs
for details on executing a BigQuery persistent UDF.
DROP FUNCTION
syntax
The following table addresses differences in DROP FUNCTION syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
|
Note: BigQuery does not require using the function's signature (argument data type) for deleting the function. |
BigQuery requires that you specify the project_name
if the function
is not located in the current project.
Additional function commands
This section covers additional UDF commands supported by Snowflake that are not directly available in BigQuery.
ALTER FUNCTION
syntax
Snowflake supports the following operations using
ALTER FUNCTION
syntax.
- Renaming a UDF
- Converting to (or reverting from) a secure UDF
- Adding, overwriting, removing a comment for a UDF
As configuring function security and adding function comments is not available in BigQuery, ALTER FUNCTION syntax is currently not supported. However, the CREATE FUNCTION statement can be used to create a UDF with the same function definition but a different name.
DESCRIBE FUNCTION
syntax
Snowflake supports describing a UDF using DESC[RIBE] FUNCTION syntax. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
SHOW USER FUNCTIONS
syntax
In Snowflake, SHOW USER FUNCTIONS syntax can be used to list all UDFs for which users have access privileges. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
Stored procedures
Snowflake stored procedures are written in JavaScript, which can execute SQL statements by calling a JavaScript API. In BigQuery, stored procedures are defined using a block of SQL statements.
CREATE PROCEDURE
syntax
In Snowflake, a stored procedure is executed with a CALL command while in BigQuery, stored procedures are executed like any other BigQuery function.
The following table addresses differences in stored procedure creation syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option. |
CREATE [OR REPLACE] PROCEDURE
Note: BigQuery doesn't support a return type for stored procedures. Also, it requires specifying argument mode for each argument passed. |
|
|
|
CREATE [OR REPLACE] PROCEDURE
Nota: o comportamento do procedimento para entradas nulas é processado implicitamente no BigQuery e não precisa de ser especificado como uma opção separada. |
CREATE [OR REPLACE] PROCEDURE
|
Nota:a volatilidade do procedimento não é um parâmetro configurável no BigQuery. É equivalente à volatilidade de IMMUTABLE da Snowflake. |
CREATE [OR REPLACE] PROCEDURE
|
Nota:atualmente, a adição de comentários ou descrições nas definições de procedimentos não é suportada no BigQuery. |
CREATE [OR REPLACE] PROCEDURE
Nota: o Snowflake suporta a especificação do autor da chamada ou do proprietário do procedimento para execução |
Nota: os procedimentos armazenados do BigQuery são sempre executados como o autor da chamada |
O BigQuery também suporta a declaração CREATE PROCEDURE IF NOT EXISTS
, que trata a consulta como bem-sucedida e não toma nenhuma medida se já existir uma função com o mesmo nome.
Sintaxe DROP PROCEDURE
A tabela seguinte aborda as diferenças na sintaxe DROP FUNCTION entre o Snowflake e o BigQuery.
Snowflake | BigQuery |
---|---|
|
Nota: o BigQuery não requer a utilização da assinatura do procedimento (tipo de dados do argumento) para eliminar o procedimento. |
O BigQuery requer que especifique o project_name
se o procedimento não estiver localizado no projeto atual.
Comandos de procedimentos adicionais
O Snowflake fornece comandos adicionais, como
ALTER PROCEDURE
,
DESC[RIBE] PROCEDURE
,
e
SHOW PROCEDURES
para gerir os procedimentos armazenados. Atualmente, não são suportados no BigQuery.
Metadados e declarações SQL de transações
Snowflake | BigQuery |
---|---|
|
O BigQuery usa sempre o isolamento de instantâneos. Para ver detalhes, consulte Garantias de consistência noutro local deste documento. |
|
Não usado no BigQuery. |
|
Não usado no BigQuery |
|
Não usado no BigQuery. |
Declarações SQL multilinhas e com várias declarações
O Snowflake e o BigQuery suportam transações (sessões) e, por isso, suportam declarações separadas por pontos e vírgulas que são executadas em conjunto de forma consistente. Para mais informações, consulte o artigo Transações com vários extratos.
Colunas de metadados para ficheiros preparados
O Snowflake gera automaticamente metadados para ficheiros em preparações internas e externas. Estes metadados podem ser consultados e carregados numa tabela juntamente com as colunas de dados normais. Podem ser usadas as seguintes colunas de metadados:
Garantias de consistência e isolamento de transações
O Snowflake 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
A cada transação do Snowflake é atribuída uma hora de início exclusiva (inclui milissegundos) que é definida como o ID da transação. O Snowflake só suporta o nível de isolamento READ COMMITTED
. No entanto, uma declaração pode ver as alterações feitas por outra declaração se ambas estiverem na mesma transação, mesmo que essas alterações ainda não tenham sido confirmadas. As transações do Snowflake adquirem bloqueios em recursos (tabelas) quando esse recurso está a ser modificado. Os utilizadores podem ajustar o tempo máximo que uma declaração bloqueada aguarda até atingir o limite de tempo. As instruções DML são
confirmadas automaticamente se o parâmetro
AUTOCOMMIT
estiver ativado.
O BigQuery também suporta transações. O BigQuery ajuda a garantir o controlo de concorrência otimista (o primeiro a confirmar ganha) com o isolamento de instantâneos, 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. No entanto, o BigQuery ainda não fornece um limite de transação explícito nem uma sessão.
Reversão
Se a sessão de uma transação do Snowflake for terminada inesperadamente antes de a transação ser confirmada ou revertida, a transação fica num estado desanexado. O utilizador deve executar SYSTEM$ABORT_TRANSACTION para anular a transação separada ou o Snowflake vai reverter a transação separada após quatro horas de inatividade. Se ocorrer um impasse, o Snowflake deteta o impasse e seleciona a declaração mais recente para reverter. Se a declaração DML numa transação aberta explicitamente falhar, as alterações são revertidas, mas a transação permanece aberta até ser confirmada ou revertida. Não é possível reverter as declarações DDL no Snowflake, uma vez que são confirmadas automaticamente.
O BigQuery suporta a declaração ROLLBACK TRANSACTION
.
Não existe nenhuma declaração ABORT
no BigQuery.
Limites da base de dados
Verifique sempre a documentação pública do BigQuery para conhecer 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.
Por predefinição, todas as contas do Snowflake têm limites flexíveis definidos. Os limites flexíveis são definidos durante a criação da conta e podem variar. Muitos limites flexíveis do Snowflake podem ser aumentados através da equipa da conta do Snowflake ou de um pedido de apoio técnico.
A tabela seguinte mostra uma comparação dos limites da base de dados do Snowflake e do BigQuery.
Limite | Snowflake | BigQuery |
---|---|---|
Tamanho do texto da consulta | 1 MB | 1 MB |
Número máximo de consultas simultâneas | XS Warehouse - 8 S Warehouse - 16 M Warehouse - 32 L Warehouse - 64 XL Warehouse - 128 |
100 |