Guia de tradução de SQL do Snowflake
Neste documento, detalhamos as semelhanças e diferenças de sintaxe de SQL entre o Snowflake e o BigQuery para acelerar o planejamento e a execução da migração do armazenamento de dados corporativos (EDW, na sigla em inglês) para o BigQuery. O armazenamento de dados do Snowflake foi projetado para funcionar com a sintaxe de SQL específica do Snowflake. Os scripts criados para o Snowflake talvez precisem ser alterados antes de serem usados no BigQuery, porque os dialetos de SQL variam entre os serviços. Use a tradução do SQL em lote para migrar os scripts SQL em massa ou a tradução interativa do SQL para traduzir consultas ad-hoc. O SQL do Snowflake é compatível com as duas ferramentas da prévia.
Tipos de dados
Esta seção mostra os equivalentes entre os tipos de dados do Snowflake e do BigQuery.
Snowflake | BigQuery | Observações |
---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC |
O tipo de dados NUMBER do Snowflake aceita 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 usuário.O BigQuery é compatível com 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 , representa 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) |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
O tipo de dados FLOAT do Snowflake estabelece "NaN" como > X, em que X é qualquer valor FLOAT diferente de "NaN".O tipo de dados FLOAT do BigQuery estabelece "NaN" como < X, em que X é qualquer valor FLOAT diferente de "NaN". |
DOUBLE/ REAL |
FLOAT64 |
O tipo de dados DOUBLE do Snowflake é equivalente ao tipo FLOAT do Snowflake, mas geralmente é exibido incorretamente como FLOAT . Ele é armazenado corretamente como DOUBLE . |
VARCHAR |
STRING |
O tipo de dados VARCHAR do Snowflake tem um tamanho máximo de 16 MB, não compactado. Se o tamanho não estiver especificado, o padrão é o tamanho máximo.O tipo de dados STRING do BigQuery é armazenado como Unicode codificado em UTF-8 de tamanho variável. O tamanho máximo é de 16.000 caracteres. |
CHAR/CHARACTER |
STRING |
O tipo de dados CHAR do Snowflake tem um tamanho máximo de 1. |
STRING/TEXT |
STRING |
O tipo de dados STRING do Snowflake é equivalente ao VARCHAR do Snowflake. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
O tipo de dados BOOL do BigQuery só aceita TRUE/FALSE , ao contrário do tipo de dados BOOL do Snowflake, que aceita TRUE/FALSE/NULL. |
DATE |
DATE |
O tipo DATE do Snowflake aceita os formatos de data mais comuns, ao contrário do tipo DATE do BigQuery, que aceita apenas datas no formato YYYY-[M]M-[D]D. |
TIME |
TIME |
O tipo TIME do Snowflake aceita de 0 a 9 nanossegundos de precisão, enquanto o tipo TIME do BigQuery aceita de 0 a 6 nanossegundos de precisão. |
TIMESTAMP |
DATETIME |
TIMESTAMP é um alias configurável pelo usuário que tem como padrão TIMESTAMP_NTZ , mapeado para DATETIME no BigQuery. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
O tipo OBJECT do Snowflake não aceita valores explicitamente especificados. Os valores são do tipo VARIANT . |
VARIANT |
JSON |
O tipo OBJECT do Snowflake não aceita valores explicitamente especificados. Os valores são do tipo VARIANT . |
ARRAY |
ARRAY<JSON> |
O tipo ARRAY do Snowflake aceita apenas os tipos VARIANT , enquanto o tipo ARRAY no BigQuery aceita todos os tipos de dados, exceto uma matriz em si. |
O BigQuery também tem os seguintes tipos de dados que não têm um análogo direto do Snowflake:
Sintaxe e operadores de consulta
Nesta seção, mostramos as diferenças de sintaxe de consulta entre o Snowflake e o BigQuery.
Instrução SELECT
A maioria das instruções SELECT
do Snowflake é compatível com o BigQuery. A tabela a seguir
mostra uma lista de pequenas diferenças.
Snowflake | BigQuery | |
---|---|---|
|
|
|
Observação: o Snowflake é compatível com a criação e a indicação de um alias na mesma instrução SELECT . |
|
|
|
|
Por padrão, os aliases e identificadores do Snowflake não diferenciam maiúsculas de minúsculas. Para preservar a capitalização, coloque aliases e identificadores entre aspas duplas (").
O BigQuery aceita as seguintes expressões em instruções
SELECT
, que não têm um equivalente no Snowflake:
Cláusula FROM
Uma
cláusula FROM
em uma consulta especifica as tabelas, visualizações, subconsultas ou funções de tabela possíveis para
uma instrução SELECT. Todas essas referências de tabela são compatíveis com o BigQuery.
A tabela a seguir mostra uma lista de pequenas diferenças.
Snowflake | BigQuery | |
---|---|---|
|
WITH table1 AS |
|
|
|
|
|
Observação: o BigQuery não tem uma alternativa direta ao processo do Snowflake ANTES de usar um ID de instrução. O valor do timestamp não pode ser mais de 7 dias antes do carimbo de data/hora atual. |
|
|
O BigQuery não oferece suporte ao conceito de arquivos preparados. |
|
|
O BigQuery não oferece uma alternativa direta à |
As tabelas do BigQuery podem ser indicadas na cláusula FROM
usando:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
O BigQuery também aceita referências a outras tabelas:
- Versões anteriores de definição e de linhas da tabela usando
FOR SYSTEM_TIME AS OF
. - Caminhos de campo ou qualquer caminho que determine um campo dentro de um tipo de dados, ou seja, um
STRUCT
. - Matrizes planas.
Cláusula WHERE
A cláusula
WHERE
do Snowflake e a cláusula
WHERE
do BigQuery são idênticas, exceto o seguinte:
Snowflake | BigQuery | |
---|---|---|
|
SELECT col1, col2 Observação: o BigQuery não oferece suporte à sintaxe (+) para JOIN s. |
Tipos JOIN
Tanto o Snowflake quanto o BigQuery são compatíveis com os seguintes tipos de junção:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
e a equivalente comma cross join implícita
Tanto o Snowflake quanto o BigQuery são compatíveis com as cláusulas ON
e USING
.
A tabela a seguir mostra uma lista de pequenas diferenças.
Snowflake | BigQuery | |
---|---|---|
|
Observação: no BigQuery, as cláusulas JOIN exigem uma condição JOIN, a menos que seja uma CROSS JOIN ou que uma das tabelas unidas seja um campo em um tipo de dados ou matriz. |
|
Observação: 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 na visualização in-line. As linhas do lado esquerdo não precisam ser unidas ao lado direito, porque já foram consideradas ao serem passadas para a visualização in-line. |
LATERAL JOIN s. |
Cláusula WITH
Uma cláusula WITH
do BigQuery
contém uma ou mais subconsultas nomeadas que são executadas toda vez que uma instrução
SELECT
subsequente faz referência a elas. As cláusulas WITH
do Snowflake se
comportam da mesma forma que as do BigQuery, com a
exceção de que o BigQuery não é compatível com WITH RECURSIVE
.
Cláusula GROUP BY
As cláusulas GROUP BY
do Snowflake são compatíveis com GROUP
BY
,
GROUP BY
ROLLUP
,
GROUP BY GROUPING
SETS
e GROUP BY
CUBE
,
com cláusulas GROUP BY
do BigQuery GROUP
BY
e
GROUP BY
ROLLUP
.
HAVING
do Snowflake
e HAVING
do BigQuery são
equivalentes. HAVING
ocorre após GROUP BY
e de agregação e antes
de ORDER BY
.
Snowflake | BigQuery | |
---|---|---|
|
|
|
|
|
|
Observação: o Snowflake permite até 128 conjuntos de agrupamento no mesmo bloco de consulta. |
O BigQuery não oferece uma alternativa direta à GROUP BY GROUPING SETS do Snowflake. |
|
Observação: o Snowflake permite até 7 elementos (128 conjuntos de agrupamento) em cada cubo. |
O BigQuery não oferece uma alternativa direta à GROUP BY CUBE do Snowflake. |
Cláusula ORDER BY
Há algumas pequenas diferenças entre
cláusulas ORDER BY
do Snowflake
e
cláusulas ORDER BY
do BigQuery.
Snowflake | BigQuery | |
---|---|---|
No Snowflake, os NULL s são classificados por último, por padrão (ordem crescente). |
Já no BigQuery, os NULLS vêm primeiro na classificação, por padrão (ordem crescente). |
|
É possível especificar se os valores de NULL precisam ser os primeiros ou os últimos usando NULLS FIRST ou NULLS LAST , respectivamente. |
Não há equivalente para especificar se os valores NULL precisam ser os primeiros ou os últimos no BigQuery. |
Cláusula LIMIT/FETCH
A
cláusula LIMIT/FETCH
do Snowflake restringe o número máximo de linhas retornadas por uma
instrução ou subconsulta.
LIMIT
(sintaxe Postgres) e
FETCH
(sintaxe ANSI) produzem o mesmo resultado.
No Snowflake e no BigQuery, aplicar uma cláusula LIMIT
a uma consulta não afeta a quantidade de dados lidos.
Snowflake | BigQuery | |
---|---|---|
Observação: NULL , string vazia ('') e valores $$$$ são aceitos e são tratados como "ilimitados". O uso principal é para conectores e drivers. |
Observação: o BigQuery não é compatível com FETCH . LIMIT substitui FETCH .Observação: no BigQuery, OFFSET precisa ser usado com um LIMIT count . Defina o valor count INT64 como o mínimo de linhas ordenadas necessárias para um melhor desempenho. Ordenar todas as linhas de resultado desnecessariamente resulta em um desempenho pior da execução da consulta. |
Cláusula QUALIFY
A
cláusula QUALIFY
do Snowflake permite filtrar resultados de funções de janela de forma semelhante ao que o
HAVING
faz com funções agregadas e cláusulas GROUP BY
.
Snowflake | BigQuery | |
---|---|---|
|
A cláusula QUALIFY do Snowflake com uma função
analítica como ROW_NUMBER() e COUNT() e com
OVER PARTITION BY é expressa
no BigQuery como uma cláusula WHERE de uma subconsulta
que contém o valor da análise.Como usar ROW_NUMBER() :SELECT col1, col2
Como usar ARRAY_AGG() , que é compatível com partições maiores:
|
Funções
As seções a seguir listam as funções do Snowflake e os equivalentes do BigQuery.
Funções de agregação
A tabela a seguir mostra os mapeamentos entre as funções de agregação, agregação analítica e agregação aproximada do Snowflake com os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
Observação: DISTINCT não tem efeito algum |
|
Observação: DISTINCT não tem efeito algum |
Observação: o BigQuery não é compatível com APPROX_COUNT_DISTINCT com funções de janela. |
Observação: o Snowflake não tem a opção RESPECT NULLS |
Observação: o BigQuery não é compatível com APPROX_QUANTILES com funções de janela. |
|
O BigQuery não tem a capacidade de armazenar o estado intermediário ao prever valores aproximados. |
|
O BigQuery não tem a capacidade de armazenar o estado intermediário ao prever valores aproximados. |
|
O BigQuery não tem a capacidade de armazenar o estado intermediário ao prever valores aproximados. |
Observação: se nenhum parâmetro numérico for especificado, o padrão é 1. Os contadores devem ser significativamente maiores que o número. |
Observação: o BigQuery não é compatível com APPROX_TOP_COUNT com funções de janela. |
|
O BigQuery não tem a capacidade de armazenar o estado intermediário ao prever valores aproximados. |
|
O BigQuery não tem a capacidade de armazenar o estado intermediário ao prever valores aproximados. |
|
O BigQuery não tem a capacidade de armazenar o estado intermediário ao prever valores aproximados. |
|
Use uma UDF personalizada para implementar MINHASH com funções hash k distintas. Outra abordagem para reduzir a variação em MINHASH é manterk dos valores mínimos de uma função hash. Nesse caso, o índice de Jaccard pode ser aproximado da seguinte maneira:
|
|
É sinônimo de APPROXIMATE_JACCARD_INDEX e pode ser implementado da mesma forma. |
|
|
|
Observação: o AVG do BigQuery não realiza a transmissão automática em STRING s. |
|
INTEGER mais próximo. |
|
Observação: o BigQuery não transmite implicitamente colunas de caracteres/textos para o INTEGER mais próximo. |
|
Observação: o BigQuery não transmite implicitamente colunas de caracteres/textos para o INTEGER mais próximo. |
Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE , se não forem zero. |
|
Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE , se não forem zero. |
|
Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE , se não forem zero. |
Para expressão numérica:
Para usar OVER , execute o seguinte (exemplo booleano fornecido):
|
|
|
|
|
|
|
|
|
|
O BigQuery não oferece uma alternativa direta à GROUPING do Snowflake. Disponível por meio de uma função definida pelo usuário. |
|
O BigQuery não oferece uma alternativa direta à GROUPING_ID do Snowflake. Disponível por meio de uma função definida pelo usuário. |
|
SELECIONAR BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER] DE t |
Observação: o Snowflake não permite especificar a precisão. |
Observação: o BigQuery não é compatível com HLL_COUNT… com funções de janela. Um usuário não pode incluir várias expressões em uma única função HLL_COUNT... . |
Observação: o Snowflake não permite especificar a precisão. |
HLL_COUNT.INIT (expression [, precision]) |
|
HLL_COUNT.MERGE_PARTIAL (sketch) |
|
|
|
O BigQuery não oferece uma alternativa direta à HLL_EXPORT do Snowflake. |
|
O BigQuery não oferece uma alternativa direta à HLL_IMPORT do Snowflake. |
|
O BigQuery não oferece uma alternativa direta à KURTOSIS do Snowflake. |
|
|
Observação: o Snowflake não tem a capacidade de IGNORE|RESPECT NULLS e LIMIT diretamente em ARRAY_AGG. . |
|
|
|
|
É possível usar uma UDF personalizada para implementar MINHASH com funções hash k distintas. Outra abordagem para reduzir a variação em MINHASH é manter k dos valores mínimos de uma função 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 |
|
|
|
Use TO_JSON_STRING para converter um valor em uma string formatada em JSON. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O BigQuery não oferece uma alternativa direta à SKEW do Snowflake. |
|
|
|
|
|
|
|
|
Observação: o Snowflake tem a capacidade de transmitir VARCHAR s para valores de ponto flutuante. |
|
Observação: o Snowflake tem a capacidade de transmitir VARCHAR s para valores de ponto flutuante. |
|
Observação: o Snowflake tem a capacidade de transmitir VARCHAR s para valores de ponto flutuante. |
|
Observação: o Snowflake tem a capacidade de transmitir VARCHAR s para valores de ponto flutuante. |
|
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 análogos diretos no Snowflake:
Funções de expressão bit a bit
A tabela a seguir mostra os mapeamentos entre funções de expressão bit a bit comuns do Snowflake e os equivalentes do BigQuery.
Se o tipo de dados de uma expressão não for INTEGER
, o Snowflake tentará transmitir
para INTEGER
. No entanto, o BigQuery não tenta transmitir para INTEGER
.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
Observação: o Snowflake não é compatível com DISTINCT. . |
|
Funções de expressão condicional
A tabela a seguir mostra os mapeamentos entre expressões condicionais comuns do Snowflake com os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
|
|
Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE , se não forem zero. |
|
Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE , se não forem zero. |
|
BOOLOR Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE se não forem zero. |
|
BOOLXOR Observação: o Snowflake permite que valores numéricos, decimais e de ponto flutuante sejam tratados como TRUE se não forem zero. |
O BigQuery não é compatível com uma alternativa direta ao BOOLXOR. do Snowflake |
|
|
Observação: o Snowflake requer pelo menos duas expressões. O BigQuery só precisa de uma. |
|
|
DECODE do Snowflake. O usuário precisa usar IS NULL em vez de = NULL para corresponder expressões de seleção NULL com expressões de pesquisa NULL . |
|
O BigQuery não oferece uma alternativa direta à EQUAL_NULL. do Snowflake |
|
|
|
|
|
|
|
|
|
O BigQuery não oferece uma alternativa direta à IS [ NOT ] DISTINCT FROM. do Snowflake |
|
|
|
O BigQuery não oferece suporte aos tipos de dados VARIANT . |
|
|
|
|
|
|
|
|
|
REGR... do Snowflake. |
|
Observação: o BigQuery não oferece uma alternativa direta às funções REGR... do Snowflake. |
|
|
Funções contextuais
A tabela a seguir mostra os mapeamentos entre funções de contexto comuns do Snowflake e os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
Observação: não é uma comparação direta. O Snowflake retorna o ID da conta, o BigQuery retorna o endereço de e-mail do usuário. |
|
Conceito não usado no BigQuery |
|
Isso retorna uma tabela de nomes de projetos. Não é uma comparação direta. |
|
Observação: o Snowflake não aplica "()" após o comando CURRENT_DATE para atender aos padrões ANSI. |
Observação: o CURRENT_DATE do BigQuery é compatível com a especificação de fuso horário opcional. |
Observação: o INFORMATION_SCHEMA.SCHEMATA do BigQuery retorna referências de localização mais generalizadas que o CURRENT_REGION() do Snowflake. Não é uma comparação direta. |
|
Conceito não usado no BigQuery |
|
Isso retorna uma tabela de todos os conjuntos de dados (também chamados de 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 |
|
Observação: o INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar consultas por tipo de job, tipo de início/término, etc. |
|
Observação: o Snowflake permite a precisão fracionária de segundos, que é opcional. Os valores válidos vão de 0 a 9 nanossegundos. O valor padrão é 9. Para obedecer ao ANSI, isso pode ser chamado sem "()". |
|
Observação: o Snowflake permite a precisão fracionária de segundos, que é opcional. Os valores válidos vão de 0 a 9 nanossegundos. O valor padrão é 9. Para obedecer ao ANSI, isso pode ser chamado sem "()". Defina TIMEZONE como um parâmetro de sessão. |
Observação:
CURRENT_DATETIME retorna o tipo de dados DATETIME (incompatível com o Snowflake). CURRENT_TIMESTAMP retorna o tipo de dados TIMESTAMP . |
INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar IDs de job por tipo de job, tipo de início/término, etc. |
|
Observação: o Snowflake não aplica "()" após o comando CURRENT_USER para atender aos padrões ANSI. |
|
Conceito não usado no BigQuery |
|
|
|
|
Observação: o INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar IDs de job por tipo de job, tipo de início/término, etc. |
Observação: o INFORMATION_SCHEMA.JOBS_BY_* do BigQuery permite pesquisar IDs de job por tipo de job, tipo de início/término, etc. |
|
Observação: o Snowflake não aplica "()" após o comando LOCALTIME para atender aos padrões ANSI. |
|
Observação:
CURRENT_DATETIME retorna o tipo de dados DATETIME (incompatível com o Snowflake). CURRENT_TIMESTAMP retorna o tipo de dados TIMESTAMP . |
Funções de conversão
A tabela a seguir mostra os mapeamentos entre funções de conversão comuns do Snowflake com os equivalentes do BigQuery.
Funções que parecem idênticas no Snowflake e no BigQuery podem retornar diferentes tipos de dados.
Snowflake | BigQuery |
---|---|
|
|
|
|
Observação: o Snowflake oferece suporte para a conversão HEX , BASE64 e UTF-8 . O Snowflake também oferece suporte a TO_BINARY usando o tipo de dados VARIANT . O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: a transmissão STRING padrão do BigQuery usa a codificação UTF-8 . O Snowflake não tem opção de suporte à codificação BASE32 . |
Observação:
|
Observação:
|
Observação: os modelos de formato do Snowflake podem ser encontrados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: a expressão de entrada do BigQuery pode ser formatada por FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME ou FORMAT_TIMESTAMP . |
Observação: o Snowflake tem a capacidade de converter diretamente os tipos INTEGER para os tipos DATE . Os modelos de formato do Snowflake podem ser encontrados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: a expressão de entrada do BigQuery pode ser formatada por FORMAT , FORMAT_DATETIME ou FORMAT_TIMESTAMP . |
Observação: os modelos de formato do Snowflake para os tipos de dados DECIMAL , NUMBER e NUMERIC podem ser encontrados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: a expressão de entrada do BigQuery pode ser formatada por FORMAT. |
Observação: os modelos de formato do Snowflake para os tipos de dados DOUBLE podem ser encontrados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: a expressão de entrada do BigQuery pode ser formatada por 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. |
Observação: os modelos de formato do Snowflake para os tipos de dados STRING podem ser encontrados aqui. O BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: o BigQuery não tem uma alternativa ao tipo de dados VARIANT do Snowflake. A expressão de entrada do BigQuery pode ser formatada por FORMAT , FORMAT_DATETIME , FORMAT_TIMESTAMP ou FORMAT_TIME . |
Observação: o BigQuery não tem uma alternativa ao tipo de dados VARIANT . |
Observação: a expressão de entrada do BigQuery pode ser formatada por FORMAT , FORMAT_DATE , FORMAT_DATETIME e FORMAT_TIME . O fuso horário pode ser incluído ou não por 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 a seguir mostra os mapeamentos entre funções de geração de dados comuns do Snowflake e os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
|
O BigQuery não oferece suporte a uma comparação direta com o NORMAL. do Snowflake. |
|
Observação: o BigQuery não aceita a propagação |
|
O BigQuery não oferece suporte a uma comparação direta com o RANDSTR. do Snowflake. |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
O BigQuery não oferece suporte a uma comparação direta com o SEQ_. do Snowflake. |
|
Observação: use UDFs permanentes para criar um equivalente ao UNIFORM do Snowflake. Exemplo aqui. |
UUID_STRING([uuid, name]) Observação: o Snowflake retorna 128 bits aleatórios. O Snowflake é compatível com UUIDs das versões 4 (aleatória) e 5 (nomeada). |
Observação: o BigQuery retorna 122 bits aleatórios. O BigQuery é compatível apenas com UUIDs da versão 4. |
|
O BigQuery não oferece suporte a uma comparação direta com o ZIPF. do Snowflake. |
Funções de data e hora
A tabela a seguir mostra os mapeamentos entre funções de data e hora comuns do Snowflake com os equivalentes do BigQuery. As funções de data e hora do BigQuery são funções de data, funções datetime, funções de hora e funções de carimbo de data/hora.
Snowflake | BigQuery |
---|---|
|
|
|
Observação: o campo source_timezone é sempre UTC no BigQuery. |
Observação: o Snowflake é compatível com datas excedentes e negativas. Por exemplo, DATE_FROM_PARTS(2000, 1 + 24, 1) retorna 1o de janeiro de 2002. Isso não é aceito no BigQuery. |
|
Observação: o Snowflake é compatível com os tipos de parte ISO de dia da semana, nanosegundos e segundos/milissegundos/microssegundos/nanossegundos de época. O BigQuery não faz isso. Confira a lista completa de tipos de parte do Snowflake aqui
. |
Observação: o BigQuery oferece suporte aos tipos de parte de semana (<weekday>), microssegundo e milissegundo. O Snowflake não. Confira a lista completa dos tipos de parte do BigQuery aqui e aqui. |
Observação: o Snowflake é compatível com o tipo de parte de nanossegundos. O BigQuery não faz isso. Confira a lista completa de tipos de parte do Snowflake aqui
. |
Observação: o BigQuery é compatível com os tipos de parte de semana (<weekday>), semana ISO e ano ISO. O Snowflake não. |
|
|
Observação: o Snowflake é compatível com o cálculo da diferença entre dois tipos de data, hora e carimbo de data/hora nessa função. |
Observação: o BigQuery é compatível com os tipos de parte de semana (<weekday>) e ano ISO. |
|
|
Observação: o Snowflake é compatível com os tipos de parte ISO de dia da semana, nanosegundos e segundos/milissegundos/microssegundos/nanossegundos de época. O BigQuery não faz isso. Confira a lista completa de tipos de parte do Snowflake aqui
. |
Observação: o BigQuery oferece suporte aos tipos de parte de semana (<weekday>), microssegundo e milissegundo. O Snowflake não. Confira a lista completa dos tipos de parte do BigQuery aqui e aqui. |
|
|
|
|
|
|
|
Observação: o dowString talvez precise ser reformatado. Por exemplo, "su" do Snowflake será "SUNDAY" do BigQuery. |
|
Observação: o dowString talvez precise ser reformatado. Por exemplo, "su" do Snowflake será "SUNDAY" do BigQuery. |
Observação: o Snowflake é compatível com horas flutuantes. Por exemplo, TIME_FROM_PARTS(0, 100, 0) retorna 01:40:00... Isso não é aceito no BigQuery. O BigQuery não aceita nanossegundos. |
|
|
Observação: o BigQuery não oferece suporte a uma comparação direta e exata com o TIME_SLICE do Snowflake. Use DATETINE_TRUNC , TIME_TRUNC e TIMESTAMP_TRUNC para o tipo de dados apropriado. |
|
|
Observação: o Snowflake é compatível com o cálculo da diferença entre dois tipos de data, hora e carimbo de data/hora nessa função. |
Observação: o BigQuery é compatível com os tipos de parte de semana (<weekday>) e ano ISO. |
|
Observação: o BigQuery exige que os carimbos de data/hora sejam inseridos como tipos STRING . Exemplo: "2008-12-25 15:30:00" |
|
|
Observação: o Snowflake é compatível com o cálculo da diferença entre dois tipos de data, hora e carimbo de data/hora nessa função. |
Observação: o BigQuery é compatível com os tipos de parte de semana (<weekday>) e ano ISO. |
Observação: o Snowflake é compatível com o tipo de parte de nanossegundos. O BigQuery não faz isso. Confira a lista completa de tipos de parte do Snowflake aqui
. |
Observação: o BigQuery é compatível com os tipos de parte de semana (<weekday>), semana ISO e ano ISO. O Snowflake não. |
|
|
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
Conceitualmente, o BigQuery não é compatível com muitos esquemas de informações e funções de tabela do Snowflake. O Snowflake oferece o esquema de informações e as funções de tabela a seguir, 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
Confira abaixo uma lista de esquemas de informações e funções de tabela associados do BigQuery e do Snowflake.
Snowflake | BigQuery |
---|---|
QUERY_HISTORY QUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_* Observação: não é uma alternativa direta. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_* Observação: não é uma alternativa direta. |
O BigQuery oferece as seguintes funções de esquema e tabela de informações, 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 a seguir mostra os mapeamentos entre funções numéricas comuns do Snowflake e os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Observação: o CEIL do BigQuery não tem a capacidade de indicar precisão ou escala. ROUND não permite especificar um arredondamento. |
|
|
|
|
|
|
|
|
|
|
|
O BigQuery não tem uma alternativa direta à FACTORIAL do Snowflake. Usar uma função definida pelo usuário. |
|
Observação: o FLOOR do BigQuery não tem a capacidade de indicar precisão ou escala. ROUND não permite especificar um arredondamento. O TRUNC é usado como equivalente para números positivos, mas não negativos, porque avalia o valor absoluto. |
|
Observação: não é uma correspondência exata, mas próxima o suficiente. |
|
|
|
Observação: a base padrão para LOG é 10. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Observação: o valor retornado pelo BigQuery precisa ser menor que a expressão; não pode ser igual a ela. |
O BigQuery também oferece as seguintes funções matemáticas, que não têm uma analogia direta 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 usuário personalizada |
ARRAY_CAT |
ARRAY_CONCAT |
ARRAY_COMPACT |
Função definida pelo usuário personalizada |
ARRAY_CONSTRUCT |
[ ] |
ARRAY_CONSTRUCT_COMPACT |
Função definida pelo usuário personalizada |
ARRAY_CONTAINS |
Função definida pelo usuário personalizada |
ARRAY_INSERT |
Função definida pelo usuário personalizada |
ARRAY_INTERSECTION |
Função definida pelo usuário personalizada |
ARRAY_POSITION |
Função definida pelo usuário personalizada |
ARRAY_PREPEND |
Função definida pelo usuário personalizada |
ARRAY_SIZE |
ARRAY_LENGTH |
ARRAY_SLICE |
Função definida pelo usuário personalizada |
ARRAY_TO_STRING |
ARRAY_TO_STRING |
ARRAYS_OVERLAP |
Função definida pelo usuário 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 usuário personalizada |
CHECK_XML |
Função definida pelo usuário personalizada |
FLATTEN |
UNNEST |
GET |
Função definida pelo usuário personalizada |
GET_IGNORE_CASE |
Função definida pelo usuário personalizada |
|
Função definida pelo usuário personalizada |
IS_<object_type> |
Função definida pelo usuário personalizada |
IS_ARRAY |
Função definida pelo usuário personalizada |
IS_BINARY |
Função definida pelo usuário personalizada |
IS_BOOLEAN |
Função definida pelo usuário personalizada |
IS_CHAR , IS_VARCHAR |
Função definida pelo usuário personalizada |
IS_DATE , IS_DATE_VALUE |
Função definida pelo usuário personalizada |
IS_DECIMAL |
Função definida pelo usuário personalizada |
IS_DOUBLE , IS_REAL |
Função definida pelo usuário personalizada |
IS_INTEGER |
Função definida pelo usuário personalizada |
IS_OBJECT |
Função definida pelo usuário personalizada |
IS_TIME |
Função definida pelo usuário personalizada |
IS_TIMESTAMP_* |
Função definida pelo usuário personalizada |
OBJECT_CONSTRUCT |
Função definida pelo usuário personalizada |
OBJECT_DELETE |
Função definida pelo usuário personalizada |
OBJECT_INSERT |
Função definida pelo usuário personalizada |
PARSE_JSON |
JSON_EXTRACT |
PARSE_XML |
Função definida pelo usuário personalizada |
STRIP_NULL_VALUE |
Função definida pelo usuário personalizada |
STRTOK_TO_ARRAY |
SPLIT |
TRY_PARSE_JSON |
Função definida pelo usuário personalizada |
TYPEOF |
Função definida pelo usuário personalizada |
XMLGET |
Função definida pelo usuário 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 usuário personalizada |
COLLATION |
Função definida pelo usuário personalizada |
COMPRESS |
Função definida pelo usuário personalizada |
|
CONCAT (...) do BigQuery é compatível com a concatenação de qualquer número de strings. |
CONTAINS |
Função definida pelo usuário personalizada |
DECOMPRESS_BINARY |
Função definida pelo usuário personalizada |
DECOMPRESS_STRING |
Função definida pelo usuário personalizada |
EDITDISTANCE |
Função definida pelo usuário personalizada |
ENDSWITH |
Função definida pelo usuário personalizada |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
Função definida pelo usuário personalizada |
ILIKE ANY |
Função definida pelo usuário personalizada |
INITCAP |
INITCAP |
INSERT |
Função definida pelo usuário personalizada |
LEFT |
Função definida pelo usuário |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
Função definida pelo usuário personalizada |
LIKE ANY |
Função definida pelo usuário personalizada |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
Função definida pelo usuário personalizada |
OCTET_LENGTH |
Função definida pelo usuário personalizada |
PARSE_IP |
Função definida pelo usuário personalizada |
PARSE_URL |
Função definida pelo usuário personalizada |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
Função definida pelo usuário |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
Função definida pelo usuário personalizada |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
Função definida pelo usuário personalizada |
SHA2,SHA2_HEX |
Função definida pelo usuário personalizada |
SHA2_BINARY |
Função definida pelo usuário personalizada |
SOUNDEX |
Função definida pelo usuário personalizada |
SPACE |
Função definida pelo usuário personalizada |
SPLIT |
SPLIT |
SPLIT_PART |
Função definida pelo usuário personalizada |
SPLIT_TO_TABLE |
Função definida pelo usuário personalizada |
STARTSWITH |
Função definida pelo usuário personalizada |
STRTOK |
Observação: todo o argumento da string do delimitador é usado como um único delimitador. O delimitador padrão é uma vírgula. |
STRTOK_SPLIT_TO_TABLE |
Função definida pelo usuário personalizada |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
Função definida pelo usuário personalizada |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
Função definida pelo usuário personalizada |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
Função definida pelo usuário personalizada |
|
UPPER |
Funções de string (expressões regulares)
Snowflake | BigQuery |
---|---|
REGEXP |
|
REGEXP_COUNT |
Se position for especificada:
Observação: o BigQuery é compatível com expressões regulares pela biblioteca re2. Consulte a sintaxe da expressão regular na documentação correspondente. |
REGEXP_INSTR |
Se position for especificada:
Se occurrence for especificada:
Observação: o BigQuery é compatível com expressões regulares pela biblioteca re2. Consulte a sintaxe da expressão regular na documentação correspondente. |
|
|
REGEXP_REPLACE |
Se replace_string for especificada:
Se position for especificada:
Observação: o BigQuery é compatível com expressões regulares pela biblioteca re2. Consulte a sintaxe da expressão regular na documentação correspondente. |
REGEXP_SUBSTR |
Se position for especificada:
Se occurrence for especificada:
Observação: o BigQuery é compatível com expressões regulares pela biblioteca re2. Consulte a sintaxe da expressão regular na documentação correspondente. |
RLIKE |
|
Funções do sistema
Snowflake | BigQuery |
---|---|
SYSTEM$ABORT_SESSION |
Função definida pelo usuário personalizada |
SYSTEM$ABORT_TRANSACTION |
Função definida pelo usuário personalizada |
SYSTEM$CANCEL_ALL_QUERIES |
Função definida pelo usuário personalizada |
SYSTEM$CANCEL_QUERY |
Função definida pelo usuário personalizada |
SYSTEM$CLUSTERING_DEPTH |
Função definida pelo usuário personalizada |
SYSTEM$CLUSTERING_INFORMATION |
Função definida pelo usuário personalizada |
SYSTEM$CLUSTERING_RATIO — Deprecated |
Função definida pelo usuário personalizada |
SYSTEM$CURRENT_USER_TASK_NAME |
Função definida pelo usuário personalizada |
SYSTEM$DATABASE_REFRESH_HISTORY |
Função definida pelo usuário personalizada |
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB |
Função definida pelo usuário personalizada |
SYSTEM$GET_AWS_SNS_IAM_POLICY |
Função definida pelo usuário personalizada |
SYSTEM$GET_PREDECESSOR_RETURN_VALUE |
Função definida pelo usuário personalizada |
SYSTEM$LAST_CHANGE_COMMIT_TIME |
Função definida pelo usuário personalizada |
SYSTEM$PIPE_FORCE_RESUME |
Função definida pelo usuário personalizada |
SYSTEM$PIPE_STATUS |
Função definida pelo usuário personalizada |
SYSTEM$SET_RETURN_VALUE |
Função definida pelo usuário personalizada |
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS |
Função definida pelo usuário personalizada |
SYSTEM$STREAM_GET_TABLE_TIMESTAMP |
Função definida pelo usuário personalizada |
SYSTEM$STREAM_HAS_DATA |
Função definida pelo usuário personalizada |
SYSTEM$TASK_DEPENDENTS_ENABLE |
Função definida pelo usuário personalizada |
SYSTEM$TYPEOF |
Função definida pelo usuário personalizada |
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS |
Função definida pelo usuário personalizada |
SYSTEM$WAIT |
Função definida pelo usuário personalizada |
SYSTEM$WHITELIST |
Função definida pelo usuário personalizada |
SYSTEM$WHITELIST_PRIVATELINK |
Função definida pelo usuário personalizada |
Funções de tabela
Snowflake | BigQuery | |
---|---|---|
GENERATOR |
Função definida pelo usuário personalizada | |
GET_OBJECT_REFERENCES |
Função definida pelo usuário personalizada | |
RESULT_SCAN |
Função definida pelo usuário personalizada | |
VALIDATE |
Função definida pelo usuário personalizada |
Funções de utilitário e hash
Snowflake | BigQuery | |
---|---|---|
GET_DDL |
Solicitação de recurso | |
HASH |
HASH é uma função exclusiva e específica do Snowflake. Eles não podem ser traduzidos sem conhecer a lógica usada pelo Snowflake. |
Funções de janela
Snowflake | BigQuery | |
---|---|---|
CONDITIONAL_CHANGE_EVENT |
Função definida pelo usuário personalizada | |
CONDITIONAL_TRUE_EVENT |
Função definida pelo usuário 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 usuário personalizada | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
Função definida pelo usuário personalizada |
O BigQuery também é compatível com
SAFE_CAST
(expressão
AS nome de tipo), que retorna NULL se o BigQuery não realizar uma
transmissão (por exemplo,
SAFE_CAST
("apple"
AS INT64) retorna NULL).
Operadores
As seções a seguir listam os operadores do Snowflake e os equivalentes do BigQuery.
Operadores aritméticos
A tabela a seguir mostra os mapeamentos entre operadores aritméticos do Snowflake com os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
Observação: o BigQuery é compatível com o menos unário padrão, mas não converte números inteiros no formato de string para os tipos INT64 , NUMERIC ou FLOAT64 . |
|
|
|
|
|
|
|
|
|
|
Para conferir os detalhes de escala e precisão do Snowflake ao 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 conjunto
A tabela a seguir mostra os mapeamentos entre os operadores de conjuntos do Snowflake e os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
|
INTERSECT DISTINCT
|
Observação: MINUS e EXCEPT são equivalentes. |
|
|
|
Operadores de subconsulta
A tabela a seguir mostra os mapeamentos entre os operadores de subconsulta do Snowflake com os equivalentes do BigQuery.
Snowflake | BigQuery |
---|---|
|
O BigQuery não oferece uma alternativa direta à ALL/ANY do Snowflake. |
|
|
|
|
|
Observação: o BigQuery exige parênteses para separar operações de conjunto diferentes. Se a mesma operação de conjunto for repetida, os parênteses não são necessários. |
Sintaxe DML
Esta seção aborda as diferenças de sintaxe da linguagem de gerenciamento de dados entre o Snowflake e o BigQuery.
Instrução INSERT
O Snowflake oferece uma palavra-chave DEFAULT
configurável para colunas. No BigQuery, o valor DEFAULT
das colunas anuláveis é NULL, e DEFAULT
não é compatível com colunas obrigatórias. A maioria das instruções INSERT
do Snowflake é compatível com o BigQuery. A tabela a seguir mostra as exceções.
Snowflake | BigQuery |
---|---|
Observação: o BigQuery não é compatível com a inserção de objetos JSON com uma instrução INSERT . . |
VALUES (DEFAULT [, ...]) Observação: o BigQuery não oferece uma alternativa direta à OVERWRITE do Snowflake. Em vez disso, use DELETE . |
|
|
... Observação:
<intoClause> representa a INSERT statement padrão, listada acima. |
O BigQuery não oferece suporte a INSERTs de várias tabelas condicionais e incondicionais. |
O BigQuery também é compatível com a inserção de valores por subconsulta, em que um dos valores é calculado por uma subconsulta, o que não é possível no Snowflake. Exemplo:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
Instrução COPY
O Snowflake permite copiar dados de arquivos de estágios para uma tabela atual e de uma tabela para um estágio interno nomeado, um estágio externo nomeado e um local externo (Amazon S3, Google Cloud Storage ou Microsoft Azure).
O BigQuery não usa o comando COPY
do SQL para carregar dados,
mas é possível usar qualquer uma das várias ferramentas e opções que não são do SQL para
carregar dados nas tabelas do BigQuery. Também é possível usar os coletores de data pipelines fornecidos no
Apache Spark
ou no
Apache Beam
para gravar dados no BigQuery.
Instrução UPDATE
A maioria das instruções UPDATE
do Snowflake é compatível com o BigQuery. A tabela a seguir
mostra as exceções.
Snowflake | BigQuery | |
---|---|---|
|
Observação: todas as instruções UPDATE do BigQuery exigem uma palavra-chave WHERE ,
seguida por uma condição. |
Declarações DELETE
e TRUNCATE TABLE
.
As instruções DELETE
e TRUNCATE TABLE
são maneiras de remover linhas de uma tabela
sem afetar o esquema ou os índices dela.
No Snowflake, DELETE
e TRUNCATE TABLE
mantêm dados excluídos usando
o Time Travel do Snowflake para fins de recuperação do período de armazenamento de dados.
No entanto, DELETE não exclui o histórico de carregamento de arquivos externos e os metadados de
carregamento.
No BigQuery, a instrução DELETE
precisa ter uma cláusula WHERE
. Para mais informações sobre DELETE
do BigQuery, consulte os
exemplos de DELETE
do BigQuery
na documentação do DML.
Snowflake | BigQuery |
---|---|
|
Observação: as instruções DELETE do BigQuery exigem uma cláusula WHERE . |
Instrução MERGE
A instrução MERGE
pode combinar operações INSERT
, UPDATE
e DELETE
em uma única instrução "upsert" e realizar as operações de maneira automática. A
operação MERGE
precisa corresponder no máximo a uma linha de origem para cada linha de destino.
As tabelas do BigQuery têm o limite de 1.000 instruções DML por dia, portanto, consolide as instruções INSERT, UPDATE e DELETE em uma única instrução MERGE de forma otimizada, conforme mostrado na tabela a seguir:
Snowflake | BigQuery |
---|---|
Observação: o Snowflake é compatível com um parâmetro de sessão ERROR_ON_NONDETERMINISTIC_MERGE para processar resultados não determinísticos. |
Observação: se todas as colunas forem atualizadas, todas as colunas devem ser listadas. |
Declarações GET
e LIST
.
A instrução GET
faz o download de arquivos de dados de um dos seguintes estágios do Snowflake para um
diretório/pasta local de um computador-cliente:
- Estágio interno nomeado
- Estágio interno para uma tabela especificada
- Estágio interno para o usuário atual
A instrução LIST
(LS) retorna uma lista de arquivos preparados, ou seja,
enviados de um sistema de arquivos local ou
descarregados de uma tabela, em um dos seguintes estágios do Snowflake:
- Estágio interno nomeado
- Estágio externo nomeado
- Estágio para uma tabela especificada
- Estágio do usuário atual
O BigQuery não é compatível com o conceito de preparo e não tem os equivalentes de GET
e LIST
.
Declarações PUT
e REMOVE
.
A instrução PUT
faz upload dos arquivos de dados, ou seja, estágios, de um diretório/pasta local de uma máquina-cliente para um dos seguintes estágios do Snowflake:
- Estágio interno nomeado
- Estágio interno para uma tabela especificada
- Estágio interno para o usuário atual
A instrução REMOVE
(RM)
remove arquivos que foram preparados em um dos seguintes estágios
internos do Snowflake:
- Estágio interno nomeado
- Estágio para uma tabela especificada
- Estágio do usuário atual
O BigQuery não é compatível com o conceito de preparo e não tem os equivalentes de PUT
e REMOVE
.
Sintaxe DDL
Nesta seção, abordamos as diferenças de sintaxe da linguagem de definição de dados entre o Snowflake e o BigQuery.
DDL de banco de dados, esquema e compartilhamento
A maior parte da terminologia do Snowflake corresponde à do BigQuery, exceto pelo banco de dados do Snowflake, que é semelhante ao conjunto de dados do BigQuery. Consulte o mapeamento detalhado do Snowflake para o BigQuery.
Instrução CREATE DATABASE
O Snowflake é compatível com a criação e o gerenciamento de um banco de dados por comandos de gerenciamento de banco de dados, enquanto o BigQuery oferece várias opções, como console, CLI, bibliotecas de cliente, etc., para criar conjuntos de dados. Esta seção usará os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças.
Snowflake | BigQuery |
---|---|
Observação: o Snowflake fornece estes requisitos para nomear bancos de dados. Ele permite apenas 255 caracteres no nome. |
Observação: o BigQuery tem requisitos de nomeação de conjunto de dados semelhantes aos do Snowflake, exceto por permitir 1.024 caracteres no nome. |
|
O BigQuery não oferece suporte à substituição do conjunto de dados. |
|
A criação de um conjunto de dados temporário não é compatível com o BigQuery. |
|
Conceito não aceito pelo BigQuery. |
|
Ainda não é possível clonar conjuntos de dados no BigQuery. |
|
A viagem no tempo no nível do conjunto de dados não é aceita pelo BigQuery. No entanto, a viagem no tempo para resultados de tabela e consulta é aceita. |
|
O BigQuery não oferece suporte à ordenação em DDL. |
|
|
|
Não é possível criar conjuntos de dados compartilhados no BigQuery. No entanto, os usuários podem compartilhar o conjunto de dados pelo console/IU depois que o conjunto é criado. |
Observação: o Snowflake oferece a opção de manutenção automática em segundo plano de visualizações materializadas no banco de dados secundário, que não é compatível com o 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>
Instrução ALTER DATABASE
Nesta seção, usamos os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças das instruções ALTER.
Snowflake | BigQuery |
---|---|
|
O BigQuery não aceita a renomeação de conjuntos de dados, mas a cópia deles é aceita. |
|
A troca de conjuntos de dados não é aceita no BigQuery. |
|
O BigQuery não oferece suporte ao gerenciamento de retenção e agrupamento de dados no nível do conjunto de dados. |
|
|
|
Conceito não aceito pelo BigQuery. |
|
Conceito não aceito pelo BigQuery. |
|
Conceito não aceito pelo BigQuery. |
|
Conceito não aceito pelo BigQuery. |
|
Conceito não aceito pelo BigQuery. |
|
Conceito não aceito pelo BigQuery. |
|
Conceito não aceito pelo BigQuery. |
Instrução DROP DATABASE
Nesta seção, usamos os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças da instrução DROP.
Snowflake | BigQuery |
---|---|
Observação: no Snowflake, descartar um banco de dados não o remove permanentemente do sistema. Uma versão do banco de dados descartado é retida pelo número de dias especificado pelo parâmetro DATA_RETENTION_TIME_IN_DAYS para o banco de dados. |
-r remove todos os objetos do conjunto de dados
-d indica conjunto de dadosObservação: a exclusão de um conjunto de dados é permanente no BigQuery. Além disso, a cascata não é compatível no nível do conjunto de dados porque todos os dados e objetos do conjunto de dados são excluídos. |
O Snowflake também é compatível com o comando
UNDROP DATASET
,
que restaura a versão mais recente de um conjunto de dados descartado. No momento, isso não é aceito no BigQuery no nível do conjunto de dados.
Instrução USE DATABASE
O Snowflake oferece a opção de definir o banco de dados de uma sessão de usuário pelo comando
USE DATABASE
. Isso elimina a necessidade de especificar nomes de objeto totalmente qualificados em
comandos SQL. O BigQuery não fornece nenhuma alternativa ao comando USE DATABASE do Snowflake.
Instrução SHOW DATABASE
Nesta seção, usamos os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças da instrução SHOW.
Snowflake | BigQuery |
---|---|
Observação: o Snowflake oferece uma única opção para listar e mostrar detalhes sobre todos os bancos de dados, incluindo aqueles que foram descartados que estão no período de armazenamento. |
bq ls --format=prettyjsonand / or
Observação: no BigQuery, o comando ls fornece apenas nomes de conjuntos de dados e informações básicas, e o comando show mostra detalhes como o carimbo de data/hora da última modificação, ACLs e rótulos de um conjunto de dados. O BigQuery também oferece mais detalhes sobre os conjuntos de dados com o Esquema de informações. |
Observação: com a opção TERSE, o Snowflake permite exibir apenas informações/campos específicos sobre conjuntos de dados. |
Conceito não aceito pelo BigQuery. |
O conceito de viagem no tempo não é aceito pelo BigQuery no nível do conjunto de dados. | |
SHOW DATABASES
|
O BigQuery não oferece suporte à filtragem de resultados por nomes de conjuntos de dados. No entanto, a filtragem por rótulos é compatível. |
SHOW DATABASES
Observação: por padrão, o Snowflake não limita o número de resultados. No entanto, o valor de LIMIT não pode exceder 10 mil. |
Observação: por padrão, o BigQuery mostra apenas 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: retorna resultados formatados básicos.
- *bq ls -a: * retorna apenas conjuntos de dados anônimos, que começam com um sublinhado.
- bq ls --all: retorna todos os conjuntos de dados, inclusive os anônimos.
- bq ls --filter labels.key:value: retorna os resultados filtrados por rótulo do conjunto de dados.
- bq ls --d: exclui resultados de formulário de conjuntos de dados anônimos.
- bq show --format=pretty: retorna resultado formatados básicos detalhados para todos os conjuntos de dados.
Gerenciamento SCHEMA
O Snowflake fornece vários comandos de gerenciamento de esquema semelhantes aos comandos de gerenciamento de banco de dados. Esse conceito de criação e gerenciamento de esquemas não é suportado no BigQuery.
No entanto, o BigQuery permite especificar o esquema de uma tabela ao carregar dados nela e ao criar uma tabela vazia. Também é possível usar a detecção automática de esquema em formatos de dados compatíveis.
Gerenciamento SHARE
O Snowflake fornece vários comandos de gerenciamento de compartilhamento semelhantes aos comandos de gerenciamento de banco de dados e esquema. Esse conceito de criação e gerenciamento de compartilhamento não é suportado no BigQuery.
DDL de tabela, visualização e sequência
Instrução CREATE TABLE
A maioria das instruções CREATE TABLE
do Snowflake são
compatíveis com o BigQuery, exceto pelos seguintes
elementos de sintaxe, que não são usados no BigQuery:
Snowflake | BigQuery |
---|---|
Observação: as restrições UNIQUE e PRIMARY KEY são informativas e não são aplicadas pelo sistema do Snowflake. |
|
onde table_constraints está:
Observação: as restrições UNIQUE e PRIMARY KEY são informativas e não são aplicadas pelo sistema Snowflake. |
Observação: o BigQuery não usa as restrições de tabela UNIQUE , PRIMARY KEY , FOREIGN ou KEY . Para alcançar uma otimização semelhante à fornecida por essas restrições durante a execução da consulta, particione e agrupe as tabelas do BigQuery. CLUSTER BY pode ter 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. |
Observação: no Snowflake, a configuração BACKUP NO é especificada para "economizar tempo de processamento ao criar snapshots, restaurar a partir de snapshots e reduzir espaço de armazenamento". |
A opção de tabela BACKUP NO não é usada nem necessária porque o BigQuery mantém automaticamente até sete dias de versões anteriores de todas as tabelas, sem qualquer efeito no tempo de processamento nem no armazenamento faturado. |
onde table_attributes está:
|
O BigQuery aceita o clustering, que permite armazenar chaves em uma ordem de classificação. |
|
|
|
|
O BigQuery aceita a instrução DDL CREATE OR REPLACE
TABLE
, que substitui uma tabela já existente.
A instrução CREATE TABLE
do BigQuery também aceita as cláusulas a seguir, que não têm um equivalente no Snowflake:
Para mais informações sobre CREATE TABLE
no BigQuery, consulte os
exemplos de CREATE
do BigQuery
na documentação do DML.
Instrução ALTER TABLE
Nesta seção, usamos os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças das instruções ALTER para tabelas.
Snowflake | BigQuery |
---|---|
|
|
|
A troca de tabelas não é compatível no BigQuery. |
|
Não é possível gerenciar a compilação de dados para tabelas no BigQuery. |
|
|
|
|
Além disso, o Snowflake oferece opções de clustering, coluna e restrição para alterar tabelas que não são compatíveis com o BigQuery.
Declarações DROP TABLE
e UNDROP TABLE
.
Nesta seção, usamos os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças das instruções DROP e UNDROP.
Snowflake | BigQuery |
---|---|
Observação: no Snowflake, descartar uma tabela não a remove permanentemente do sistema. Uma versão da tabela descartada é retida pelo número de dias especificado pelo parâmetro DATA_RETENTION_TIME_IN_DAYS para o banco de dados. |
-f pula a confirmação da execução -d indica o conjunto de dados Observação: no BigQuery, excluir uma tabela também não é uma ação permanente, mas um snapshot é mantido por apenas sete dias. |
|
Observação: no BigQuery, primeiro determine um carimbo de data/hora UNIX em milissegundos de quando a tabela existia. Depois, copie a tabela desse carimbo de data/hora para uma nova tabela. A nova tabela precisa ter um nome diferente da excluída. |
Instrução CREATE EXTERNAL TABLE
Com o BigQuery, é possível criar tabelas externas permanentes e temporárias e consultar dados diretamente de:
O Snowflake permite criar uma tabela externa permanente que, quando consultada, lê dados de um conjunto de um ou mais arquivos de um cenário externo especificado.
Nesta seção, usamos os comandos da CLI do BigQuery correspondentes aos comandos do Snowflake para abordar as diferenças da instrução CREATE EXTERNAL TABLE.
Snowflake | BigQuery |
---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
Observação: o Snowflake permite preparar os arquivos que contêm os dados para serem lidos e especificar as opções de tipo de formato para tabelas externas. Os tipos de formato do Snowflake, CSV, JSON, AVRO, PARQUET, ORC, são compatíveis com o BigQuery, exceto o tipo XML. |
Observação: o BigQuery permite criar uma tabela permanente vinculada à fonte de dados usando um arquivo de definição de tabela [1], um arquivo de esquema JSON [2] ou uma definição de esquema inline [3]. O BigQuery não oferece suporte para a preparação de arquivos para leitura e a especificação de opções de tipo de formato. |
|
Observação: no momento, o BigQuery não é compatível com nenhuma das opções de parâmetro fornecidas pelo Snowflake para a criação de tabelas externas. Para particionamento, o BigQuery é compatível com o uso da pseudocoluna _FILE_NAME para criar tabelas/visualizações particionadas nas tabelas externas. Para mais informações, consulte
Consultar a pseudocoluna _FILE_NAME . |
Além disso, o BigQuery também é compatível com a consulta de dados particionados externamente nos formatos AVRO, PARQUET, ORC, JSON e CSV, armazenados no Google Cloud Storage com um layout padrão de particionamento do Hive.
Instrução CREATE VIEW
A tabela a seguir mostra equivalentes da instrução CREATE VIEW
do Snowflake e do BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
Sem suporte | CREATE VIEW IF NOT EXISTS
|
|
Para criar uma visualização no BigQuery, é necessário que todos os objetos referenciados já existam. O BigQuery permite consultar fontes de dados externas. |
Instrução CREATE SEQUENCE
As sequências não são usadas no BigQuery. Para conseguir isso com a seguinte maneira por lote. Para mais informações sobre chaves alternativas e dimensões que mudam lentamente (SCD, na sigla em inglês), consulte os seguintes guias:
|
---|
DDL de carregamento e descarregamento de dados
O Snowflake oferece suporte ao carregamento e descarregamento de dados por meio de comandos de cenário, formato de arquivo e gerenciamento de pipeline. O BigQuery também fornece várias opções para carregamento de bq, serviço de transferência de dados do BigQuery, extração de bq, etc. Esta seção destaca as diferenças dessas metodologias para carregamento e descarregamento de dados.
DDL de conta e sessão
Os conceitos de conta e sessão do Snowflake não são compatíveis com o BigQuery. O BigQuery permite o gerenciamento de contas por meio do Cloud IAM em todos os níveis. Além disso, transações de várias instruções ainda não são aceitas pelo BigQuery.
Funções definidas pelo usuário (UDF)
Uma UDF permite criar funções para operações personalizadas. Essas funções aceitam colunas de entrada, executam ações e mostram o resultado dessas ações como um valor.
Tanto o Snowflake quanto o BigQuery são compatíveis com UDF usando expressões SQL e código JavaScript.
Consulte uma biblioteca de UDFs comuns do BigQuery no repositório do GitHub GoogleCloudPlatform/bigquery-utils/.
Sintaxe de CREATE FUNCTION
A tabela a seguir aborda as diferenças da sintaxe de criação de UDF em SQL entre o Snowflake e o BigQuery.
Snowflake | BigQuery |
---|---|
|
Observação: na UDF em SQL do BigQuery, o tipo de dados retornados é opcional. O BigQuery infere o tipo de resultado da função a partir do corpo da função do SQL, quando uma consulta chama a função. |
|
Observação: na UDF em SQL do BigQuery, retornar tipo de tabela atualmente não é compatível, mas está na estratégia do produto para ser disponibilizado em breve. No entanto, o BigQuery aceita o retorno de ARRAY do tipo STRUCT. |
Observação: o Snowflake oferece uma opção segura para restringir a definição de UDF e os detalhes apenas a usuários autorizados, ou seja, usuários que recebem o papel que é proprietário da visualização. |
Observação: a segurança de função não é um parâmetro configurável no BigQuery. O BigQuery permite a criação de papéis e permissões de IAM para restringir o acesso a dados subjacentes e definição de função. |
|
Observação: o comportamento da função para entradas nulas é processado implicitamente no BigQuery e não precisa ser especificado como uma opção separada. |
|
Observação: a volatilidade de função não é um parâmetro configurável no BigQuery. Toda a volatilidade de UDF no BigQuery é equivalente à volatilidade de IMMUTABLE do Snowflake, ou seja, ele não faz pesquisas no banco de dados nem usa informações que não estejam diretamente presentes na lista de argumentos. |
|
CREATE [OR REPLACE] FUNCTION
Observação: use aspas simples ou uma sequência de caracteres, como 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
Observação: o comportamento do procedimento para entradas nulas é processado implicitamente no BigQuery e não precisa ser especificado como uma opção separada. |
CREATE [OR REPLACE] PROCEDURE
|
Observação: a volatilidade de função não é um parâmetro configurável no BigQuery. É equivalente à volatilidade IMMUTABLE do Snowflake. |
CREATE [OR REPLACE] PROCEDURE
|
Observação: no momento, não é possível adicionar comentários ou descrições em definições de procedimento no BigQuery. |
CREATE [OR REPLACE] PROCEDURE
Observação: o Snowflake permite especificar o autor da chamada ou o proprietário do procedimento para execução. |
Observação: os procedimentos armazenados no BigQuery são sempre executados como o autor da chamada. |
O BigQuery também oferece suporte à instrução CREATE PROCEDURE IF NOT EXISTS
,
que trata a consulta como bem-sucedida e não realiza nenhuma ação se já houver uma função com o mesmo
nome.
Sintaxe de DROP PROCEDURE
A tabela a seguir mostra as diferenças da sintaxe DROP FUNCTION do Snowflake e do BigQuery.
Snowflake | BigQuery |
---|---|
|
Observação: o BigQuery não exige a assinatura do procedimento (tipo de dados de argumento) para excluir o procedimento. |
O BigQuery exige que você especifique o project_name se o procedimento não estiver localizado no projeto atual.
Outros comandos de procedimento
O Snowflake fornece outros comandos, como
ALTER PROCEDURE
,
DESC[RIBE] PROCEDURE
e SHOW PROCEDURES
,
para gerenciamento de procedimentos armazenados. Atualmente, eles não são aceitos no BigQuery.
Instruções SQL de metadados e transações
Snowflake | BigQuery |
---|---|
|
O BigQuery sempre usa o isolamento de snapshot. Para conferir detalhes, consulte Garantias de consistência em outras partes deste documento. |
|
Não usado no BigQuery. |
|
Não usado no BigQuery. |
|
Não usado no BigQuery. |
Instruções SQL com várias instruções e linhas
O Snowflake e o BigQuery aceitam transações (sessões) e, portanto, são compatíveis com instruções separadas por ponto e vírgula que são executadas consistentemente em conjunto. Para mais informações, consulte Transações de várias instruções.
Colunas de metadados para arquivos preparados
O Snowflake gera metadados automaticamente para arquivos em estágios internos e externos. Esses metadados podem ser consultados e carregados em uma tabela com as colunas de dados comuns. As colunas de metadados a seguir podem ser utilizadas:
Garantias de consistência e isolamento da transação
O Snowflake e o BigQuery são atômicos, ou seja, estão em conformidade com ACID (na sigla em inglês) em um nível por mutação em muitas linhas.
Transações
Cada transação do Snowflake recebe um horário de início exclusivo (inclui
milissegundos), que é definido como o ID da transação. O Snowflake só aceita o
nível de isolamento
READ COMMITTED
. No entanto, uma instrução pode acessar as alterações feitas por outra instruçã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
eles estão sendo modificados. Os usuários podem ajustar o tempo máximo que uma instrução
bloqueada deve aguardar até que a instrução expire. As instruções DML serão
confirmadas automaticamente se o parâmetro
AUTOCOMMIT
estiver ativado.
O BigQuery também tem suporte a transações. O BigQuery ajuda a garantir o controle de simultaneidade otimista (ganha o primeiro que confirmar) com o isolamento de snapshot, em que uma consulta lê os últimos dados confirmados antes do início da consulta. Essa abordagem garante o mesmo nível de consistência por linha, por mutação e em todas as linhas da mesma instrução DML, evitando impasses. No caso de várias atualizações de DML na mesma tabela, o BigQuery alterna para controle de simultaneidade pessimista. Os jobs de carregamento podem ser executados de forma totalmente independente e anexados às tabelas. No entanto, o BigQuery ainda não fornece um limite ou sessão de transação explícita.
Reversão
Se uma sessão de transação do Snowflake for encerrada inesperadamente antes de uma confirmação ou reversão, a transação ficará em um estado removido. O usuário precisa executar SYSTEM$ABORT_TRANSACTION para cancelar a transação removida. Caso contrário, o Snowflake reverte a transação removida após quatro horas de inatividade. Se ocorrer um impasse, o Snowflake detecta o impasse e seleciona a instrução mais recente para reverter. Se a instrução DML de uma transação explicitamente aberta falhar, as alterações são revertidas, mas a transação é mantida aberta até que seja confirmada ou revertida. As instruções DDL do Snowflake não podem ser revertidas porque são confirmadas automaticamente.
O BigQuery oferece suporte à
instrução ROLLBACK TRANSACTION
.
Não há instrução ABORT
no BigQuery.
Limites de bancos de dados
Sempre verifique as cotas e os limites mais recentes na documentação pública do BigQuery. Muitas cotas para usuários de grandes volumes podem ser geradas entrando em contato com a equipe de suporte do Cloud.
Todas as contas do Snowflake têm limites flexíveis definidos por padrão. 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 pela equipe de conta do Snowflake ou por um tíquete de suporte.
A tabela a seguir mostra uma comparação dos limites de banco 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 |