Guía de traducción de SQL de Snowflake
En este documento se detallan las similitudes y diferencias entre las sintaxis SQL de Snowflake y BigQuery para ayudarle a acelerar la planificación y la ejecución de la migración de su EDW (almacén de datos empresarial) a BigQuery. El almacenamiento de datos de Snowflake está diseñado para funcionar con la sintaxis SQL específica de Snowflake. Es posible que tengas que modificar las secuencias de comandos escritas para Snowflake antes de poder usarlas en BigQuery, ya que los dialectos de SQL varían entre los servicios. Usa la traducción de SQL por lotes para migrar tus secuencias de comandos de SQL en bloque o la traducción de SQL interactiva para traducir consultas ad hoc. Ambas herramientas admiten SQL de Snowflake en versión preliminar.
Tipos de datos
En esta sección se muestran los equivalentes entre los tipos de datos de Snowflake y BigQuery.
Snowflake | BigQuery | Notas |
---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC/BIGNUMERIC |
Se puede asignar a NUMERIC o BIGNUMERIC , en función de la precisión y la escala.El tipo de datos NUMBER de Snowflake admite 38 dígitos de precisión y 37 dígitos de escala. La precisión y la escala se pueden especificar según el usuario.BigQuery admite NUMERIC y BIGNUMERIC con precisión y escala especificadas opcionalmente dentro de ciertos límites. |
INT/INTEGER |
BIGNUMERIC |
INT/INTEGER y todos los demás tipos de datos similares a INT , como BIGINT, TINYINT, SMALLINT, BYTEINT , representan un alias del tipo de datos NUMBER en el que no se pueden especificar la precisión y la escala, que siempre son NUMBER(38, 0) . La opción de configuración REWRITE_ZERO_SCALE_NUMERIC_AS_INTEGER se puede usar para convertir INTEGER y los tipos relacionados en INT64 . |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
El tipo de datos FLOAT de Snowflake establece "NaN" como > X, donde X es cualquier valor FLOAT (excepto "NaN").El tipo de datos FLOAT de BigQuery establece "NaN" como < X, donde X es cualquier valor FLOAT (excepto "NaN"). |
DOUBLE/ REAL |
FLOAT64 |
El tipo de datos DOUBLE de Snowflake es sinónimo del tipo de datos FLOAT de Snowflake, pero suele mostrarse incorrectamente como FLOAT . Se almacena correctamente como DOUBLE . |
VARCHAR |
STRING |
El tipo de datos VARCHAR de Snowflake tiene una longitud máxima de 16 MB (sin comprimir). Si no se especifica la longitud, se usará la longitud máxima.El tipo de datos STRING de BigQuery se almacena como Unicode codificado en UTF-8 de longitud variable. La longitud máxima es de 16.000 caracteres. |
CHAR/CHARACTER |
STRING |
El tipo de datos CHAR de Snowflake tiene una longitud máxima de 1. |
STRING/TEXT |
STRING |
El tipo de datos STRING de Snowflake es sinónimo de VARCHAR de Snowflake. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
El tipo de datos BOOL de BigQuery solo puede aceptar TRUE/FALSE , a diferencia del tipo de datos BOOL de Snowflake, que puede aceptar TRUE, FALSE o NULL. |
DATE |
DATE |
El tipo DATE de Snowflake acepta los formatos de fecha más habituales, a diferencia del tipo DATE de BigQuery, que solo acepta fechas con el formato "AAAA-[M]M-[D]D". |
TIME |
TIME |
El tipo TIME de Snowflake admite de 0 a 9 nanosegundos de precisión, mientras que el tipo TIME de BigQuery admite de 0 a 6 nanosegundos de precisión. |
TIMESTAMP |
DATETIME |
TIMESTAMP es un alias que puede configurar el usuario y que tiene el valor predeterminado TIMESTAMP_NTZ , que se asigna a DATETIME en BigQuery. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
El tipo OBJECT de Snowflake no admite valores con tipo explícito. Los valores son del tipo VARIANT . |
VARIANT |
JSON |
El tipo OBJECT de Snowflake no admite valores con tipo explícito. Los valores son del tipo VARIANT . |
ARRAY |
ARRAY<JSON> |
El tipo ARRAY de Snowflake solo admite tipos VARIANT , mientras que el tipo ARRAY de BigQuery puede admitir todos los tipos de datos, excepto los arrays. |
BigQuery también tiene los siguientes tipos de datos que no tienen un análogo directo en Snowflake:
Sintaxis y operadores de consulta
En esta sección se abordan las diferencias en la sintaxis de las consultas entre Snowflake y BigQuery.
SELECT
declaración
La mayoría de las sentencias de SELECT
Snowflake
son compatibles con BigQuery. En la siguiente tabla se muestra una lista de
diferencias menores.
Snowflake | BigQuery | |
---|---|---|
|
|
|
Nota: Snowflake permite crear y hacer referencia a un alias en la misma instrucción SELECT . |
|
|
|
|
Los alias e identificadores de Snowflake no distinguen entre mayúsculas y minúsculas de forma predeterminada. Para conservar las mayúsculas y minúsculas, incluye los alias y los identificadores entre comillas dobles (").
Cláusula FROM
Una cláusula A
FROM
en una consulta especifica las posibles tablas, vistas, subconsultas o funciones de tabla que se pueden usar en una instrucción SELECT. BigQuery admite todas estas referencias de tabla.
En la siguiente tabla se muestra una lista de diferencias menores.
Snowflake | BigQuery | |
---|---|---|
|
WITH table1 AS |
|
|
|
|
|
Nota: BigQuery no tiene una alternativa directa a la función BEFORE de Snowflake que use un ID de instrucción. El valor de timestamp no puede ser anterior a 7 días de la marca de tiempo actual. |
|
|
BigQuery no admite el concepto de archivos organizados. |
|
|
BigQuery no ofrece una alternativa directa a |
Se puede hacer referencia a las tablas de BigQuery en la cláusula FROM
de las siguientes formas:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery también admite referencias de tabla adicionales:
- Versiones históricas de la definición de la tabla y las filas mediante
FOR SYSTEM_TIME AS OF
- Rutas de campo o cualquier ruta que se resuelva en un campo de un tipo de datos (es decir, un
STRUCT
) - Matrices acopladas
Cláusula WHERE
Las cláusulas de Snowflake
WHERE
y BigQuery
WHERE
son idénticas, excepto en lo siguiente:
Snowflake | BigQuery | |
---|---|---|
|
SELECT col1, col2 Nota: BigQuery no admite la sintaxis (+) para JOIN s. |
Tipos de JOIN
Tanto Snowflake como BigQuery admiten los siguientes tipos de combinación:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
y el equivalente "combinación cruzada con comas" implícita
Tanto Snowflake como BigQuery admiten las cláusulas ON
y USING
.
En la siguiente tabla se muestra una lista de diferencias menores.
Snowflake | BigQuery | |
---|---|---|
|
Nota: En BigQuery, las cláusulas JOIN requieren una condición JOIN, a menos que se trate de una CROSS JOIN o que una de las tablas combinadas sea un campo de un tipo de datos o una matriz. |
|
Nota: A diferencia de la salida de una combinación no lateral, la salida de una combinación lateral solo incluye las filas generadas a partir de la vista insertada. No es necesario unir las filas de la izquierda con las de la derecha, ya que las filas de la izquierda ya se han tenido en cuenta al pasarse a la vista insertada. |
LATERAL JOIN . |
Cláusula WITH
Una cláusula WITH
de BigQuery
contiene una o varias subconsultas con nombre que se ejecutan cada vez que una instrucción SELECT
posterior las referencia.
Las cláusulas de Snowflake WITH
se comportan igual que las de BigQuery, con la excepción de que
BigQuery no admite WITH RECURSIVE
.
Cláusula GROUP BY
Snowflake admite las cláusulas GROUP BY
GROUP BY
,
GROUP BY ROLLUP
,
GROUP BY GROUPING SETS
,
y
GROUP BY CUBE
,
mientras que BigQuery admite las cláusulas GROUP BY
GROUP BY
,
GROUP BY ALL
,
GROUP BY ROLLUP
,
GROUP BY GROUPING SETS
,
y
GROUP BY CUBE
.
Snowflake
HAVING
y BigQuery
HAVING
son
sinónimos. Ten en cuenta que la HAVING
se produce después de la GROUP BY
y la agregación, y antes de la ORDER BY
.
Snowflake | BigQuery | |
---|---|---|
|
|
|
|
|
|
Nota: Snowflake permite hasta 128 conjuntos de agrupación en el mismo bloque de consulta. |
|
|
Nota: Snowflake permite hasta 7 elementos (128 conjuntos de agrupaciones) en cada cubo. |
|
Cláusula ORDER BY
Hay algunas diferencias menores entre las cláusulas Snowflake ORDER BY
y las cláusulas BigQuery ORDER BY
.
Snowflake | BigQuery | |
---|---|---|
En Snowflake, los NULL s se clasifican en último lugar de forma predeterminada (orden ascendente). |
En BigQuery, los NULLS se clasifican en primer lugar de forma predeterminada (orden ascendente). |
|
Puede especificar si los valores de NULL deben ordenarse primero o al final con NULLS FIRST o NULLS LAST , respectivamente. |
No hay ningún equivalente para especificar si los valores de NULL deben ser los primeros o los últimos en BigQuery. |
Cláusula LIMIT/FETCH
La cláusula
LIMIT/FETCH
de Snowflake limita el número máximo de filas devueltas por una instrucción o subconsulta.
LIMIT
(sintaxis de PostgreSQL) y
FETCH
(sintaxis de ANSI) producen el mismo resultado.
En Snowflake y BigQuery, aplicar una cláusula LIMIT
a una consulta no afecta a la cantidad de datos que se leen.
Snowflake | BigQuery | |
---|---|---|
Nota: NULL , la cadena vacía ("") y los valores de $$$$ se aceptan y se tratan como "ilimitados". Se usa principalmente para conectores y controladores. |
Nota: BigQuery no admite FETCH . LIMIT sustituye a FETCH .Nota: En BigQuery, OFFSET debe usarse junto con LIMIT count . Asegúrate de definir el valor count INT64 en el número mínimo de filas ordenadas necesarias para obtener el mejor rendimiento. Ordenar todas las filas de resultados innecesariamente empeorará el rendimiento de la ejecución de las consultas. |
Cláusula QUALIFY
La cláusula
QUALIFY
de Snowflake te permite filtrar los resultados de las funciones de ventana de forma similar a lo que hace HAVING
con las funciones de agregación y las cláusulas GROUP BY
.
Snowflake | BigQuery | |
---|---|---|
|
La cláusula QUALIFY de Snowflake con una función de analíticas como ROW_NUMBER() , COUNT() y OVER PARTITION BY se expresa en BigQuery como una cláusula WHERE en una subconsulta que contiene el valor de analíticas.Uso de ROW_NUMBER() :SELECT col1, col2
Usar ARRAY_AGG() , que admite particiones más grandes:
|
Functions
En las siguientes secciones se enumeran las funciones de Snowflake y sus equivalentes en BigQuery.
Funciones de agregación
En la siguiente tabla se muestran las asignaciones entre las funciones de agregación, agregación analítica y agregación aproximada de Snowflake, y sus equivalentes en BigQuery.
Snowflake | BigQuery |
---|---|
Nota: DISTINCT no tiene ningún efecto |
|
Nota: DISTINCT no tiene ningún efecto |
Nota: BigQuery no admite APPROX_COUNT_DISTINCT con funciones de ventana. |
Nota: Snowflake no tiene la opción de RESPECT NULLS |
Nota: BigQuery no admite APPROX_QUANTILES con funciones de ventana. |
|
BigQuery no permite almacenar estados intermedios al predecir valores aproximados. |
|
BigQuery no permite almacenar estados intermedios al predecir valores aproximados. |
|
BigQuery no permite almacenar estados intermedios al predecir valores aproximados. |
Nota: Si no se especifica ningún parámetro de número, el valor predeterminado es 1. Los contadores deben ser significativamente mayores que el número. |
Nota: BigQuery no admite APPROX_TOP_COUNT con funciones de ventana. |
|
BigQuery no permite almacenar estados intermedios al predecir valores aproximados. |
|
BigQuery no permite almacenar estados intermedios al predecir valores aproximados. |
|
BigQuery no permite almacenar estados intermedios al predecir valores aproximados. |
|
Puedes usar una función definida por el usuario personalizada para implementar MINHASH con k funciones hash distintas. Otra forma de reducir la varianza de MINHASH es mantenerk de los valores mínimos de una función hash. En este caso, el índice de Jaccard se puede aproximar de la siguiente manera:
|
|
Es un sinónimo de APPROXIMATE_JACCARD_INDEX y se puede implementar de la misma forma. |
|
|
|
Nota: AVG de BigQuery no realiza conversiones automáticas en STRING s. |
|
INTEGER más cercano. |
|
Nota: BigQuery no convierte implícitamente las columnas de caracteres o texto al INTEGER más cercano. |
|
Nota: BigQuery no convierte implícitamente las columnas de caracteres o texto al INTEGER más cercano. |
Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
|
Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
|
Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
Para expresiones numéricas:
Para usar OVER , puedes ejecutar lo siguiente (se proporciona un ejemplo booleano):
|
|
|
|
|
|
|
|
|
|
BigQuery no admite una alternativa directa a GROUPING de Snowflake. Disponible a través de una función definida por el usuario. |
|
BigQuery no admite una alternativa directa a GROUPING_ID de Snowflake. Disponible a través de una función definida por el usuario. |
|
SELECT BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER] FROM t |
Nota: Snowflake no permite especificar la precisión. |
Nota: BigQuery no admite HLL_COUNT… con funciones de ventana. Un usuario no puede incluir varias expresiones en una sola función HLL_COUNT... . |
Nota: Snowflake no permite especificar la precisión. |
HLL_COUNT.INIT (expression [, precision]) |
|
HLL_COUNT.MERGE_PARTIAL (boceto) |
|
|
|
BigQuery no admite una alternativa directa a HLL_EXPORT de Snowflake. |
|
BigQuery no admite una alternativa directa a HLL_IMPORT de Snowflake. |
|
BigQuery no admite una alternativa directa a KURTOSIS de Snowflake. |
|
|
Nota: Snowflake no admite la posibilidad de IGNORE|RESPECT NULLS ni de LIMIT directamente en ARRAY_AGG. . |
|
|
|
|
Puedes usar una UDF personalizada para implementar MINHASH con k funciones hash distintas. Otra forma de reducir la varianza de MINHASH es mantener k de los valores mínimos de una función 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 |
|
|
|
Puedes usar TO_JSON_STRING para convertir un valor en una cadena con formato JSON. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery no admite una alternativa directa a SKEW de Snowflake. |
|
|
|
|
|
|
|
|
Nota: Snowflake permite convertir VARCHAR s en valores de coma flotante. |
|
Nota: Snowflake permite convertir VARCHAR s en valores de coma flotante. |
|
Nota: Snowflake permite convertir VARCHAR s en valores de coma flotante. |
|
Nota: Snowflake permite convertir VARCHAR s en valores de coma flotante. |
|
BigQuery también ofrece las siguientes funciones de agregación, de analíticas de agregación y de agregación aproximada, que no tienen una función análoga directa en Snowflake:
Funciones de expresiones bit a bit
En la siguiente tabla se muestran las asignaciones entre las funciones de expresión bit a bit de Snowflake habituales y sus equivalentes en BigQuery.
Si el tipo de datos de una expresión no es INTEGER
, Snowflake intenta convertirlo a INTEGER
. Sin embargo, BigQuery no intenta convertirlo a INTEGER
.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
Nota: Snowflake no admite DISTINCT. |
|
Funciones de expresiones condicionales
En la siguiente tabla se muestran las asignaciones entre expresiones condicionales comunes de Snowflake y sus equivalentes en BigQuery.
Snowflake | BigQuery |
---|---|
|
|
Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
|
Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
|
BOOLOR Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
|
BOOLXOR Nota: Snowflake permite que los valores numéricos, decimales y de coma flotante se traten como TRUE si no son cero. |
BigQuery no admite una alternativa directa a BOOLXOR. |
|
|
Nota: Snowflake requiere al menos dos expresiones. BigQuery solo requiere uno. |
|
|
DECODE de Snowflake. El usuario debe usar IS NULL en lugar de = NULL para que las expresiones de selección NULL coincidan con las expresiones de búsqueda NULL . |
|
BigQuery no admite una alternativa directa a EQUAL_NULL. |
|
|
|
|
|
|
|
|
|
BigQuery no admite una alternativa directa a IS [ NOT ] DISTINCT FROM. |
|
|
|
BigQuery no admite los tipos de datos VARIANT . |
|
|
|
|
|
|
|
|
|
REGR... de Snowflake. |
|
Nota: BigQuery no admite una alternativa directa a las funciones REGR... de Snowflake. |
|
|
Funciones de contexto
En la siguiente tabla se muestran las asignaciones entre las funciones de contexto de Snowflake habituales y sus equivalentes de BigQuery.
Snowflake | BigQuery |
---|---|
Nota: No es una comparación directa. Snowflake devuelve el ID de la cuenta, mientras que BigQuery devuelve la dirección de correo del usuario. |
|
Concepto no utilizado en BigQuery |
|
Se devuelve una tabla con los nombres de los proyectos. No es una comparación directa. |
|
Nota: Snowflake no exige el uso de "()" después del comando CURRENT_DATE para cumplir los estándares ANSI. |
Nota: CURRENT_DATE de BigQuery admite la especificación opcional de la zona horaria. |
Nota: INFORMATION_SCHEMA.SCHEMATA de BigQuery devuelve referencias de ubicación más generalizadas que CURRENT_REGION() de Snowflake. No es una comparación directa. |
|
Concepto no utilizado en BigQuery |
|
Devuelve una tabla con todos los conjuntos de datos (también llamados esquemas) disponibles en el proyecto o la región. No es una comparación directa. |
|
Concepto no utilizado en BigQuery |
|
Concepto no utilizado en BigQuery |
|
Nota: La INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permite buscar consultas por tipo de trabajo, tipo de inicio o finalización, etc. |
|
Nota: Snowflake permite una precisión de segundos fraccionarios opcional. Los valores válidos van de 0 a 9 nanosegundos. El valor predeterminado es 9. Para cumplir con ANSI, se puede llamar sin "()". |
|
Nota: Snowflake permite una precisión de segundos fraccionarios opcional. Los valores válidos van de 0 a 9 nanosegundos. El valor predeterminado es 9. Para cumplir con ANSI, se puede llamar sin "()". Define TIMEZONE como parámetro de sesión. |
Nota:
CURRENT_DATETIME devuelve el tipo de datos DATETIME (no compatible con Snowflake). CURRENT_TIMESTAMP devuelve el tipo de datos TIMESTAMP . |
INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permite buscar IDs de trabajos por tipo de trabajo, tipo de inicio o finalización, etc. |
|
Nota: Snowflake no exige el uso de "()" después del comando CURRENT_USER para cumplir los estándares ANSI. |
|
Concepto no utilizado en BigQuery |
|
|
|
|
Nota: La INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permite buscar IDs de tareas por tipo de tarea, tipo de inicio o finalización, etc. |
Nota: La INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permite buscar IDs de tareas por tipo de tarea, tipo de inicio o finalización, etc. |
|
Nota: Snowflake no exige el uso de "()" después del comando LOCALTIME para cumplir los estándares ANSI. |
|
Nota:
CURRENT_DATETIME devuelve el tipo de datos DATETIME (no compatible con Snowflake). CURRENT_TIMESTAMP devuelve el tipo de datos TIMESTAMP . |
Funciones de conversión
En la siguiente tabla se muestran las asignaciones entre las funciones de conversión de Snowflake habituales y sus equivalentes en BigQuery.
Ten en cuenta que las funciones que parecen idénticas en Snowflake y BigQuery pueden devolver tipos de datos diferentes.
Copo de nieve | BigQuery |
---|---|
|
|
|
|
Nota: Snowflake admite la conversión de HEX , BASE64 y UTF-8 . Snowflake también admite TO_BINARY mediante el tipo de datos VARIANT . BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: La conversión STRING predeterminada de BigQuery usa la codificación UTF-8 . Snowflake no tiene ninguna opción para admitir la codificación BASE32 . |
Nota:
|
Nota:
|
Nota: Los modelos de formato de Snowflake se pueden encontrar aquí. BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: La expresión de entrada de BigQuery se puede formatear con FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME o FORMAT_TIMESTAMP . |
Nota: Snowflake admite la conversión directa de tipos INTEGER a tipos DATE . Los modelos de formato de Snowflake se pueden encontrar aquí. BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: La expresión de entrada de BigQuery se puede formatear con FORMAT , FORMAT_DATETIME o FORMAT_TIMESTAMP . |
Nota: Los modelos de formato de Snowflake para los tipos de datos DECIMAL , NUMBER y NUMERIC se pueden consultar aquí. BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: La expresión de entrada de BigQuery se puede formatear con FORMAT. |
Nota: Los modelos de formato de Snowflake para los tipos de datos DOUBLE se pueden consultar aquí. BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: La expresión de entrada de BigQuery se puede formatear con FORMAT. |
|
BigQuery no tiene una alternativa al tipo de datos VARIANT de Snowflake. |
|
BigQuery no tiene una alternativa al tipo de datos VARIANT de Snowflake. |
Nota: Los modelos de formato de Snowflake para los tipos de datos STRING se pueden consultar aquí. BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: BigQuery no tiene una alternativa al tipo de datos VARIANT de Snowflake. La expresión de entrada de BigQuery se puede formatear con FORMAT , FORMAT_DATETIME , FORMAT_TIMESTAMP o FORMAT_TIME . |
Nota: BigQuery no tiene una alternativa al tipo de datos VARIANT . |
Nota: La expresión de entrada de BigQuery se puede formatear con FORMAT , FORMAT_DATE , FORMAT_DATETIME y FORMAT_TIME . La zona horaria se puede incluir o no mediante los parámetros FORMAT_TIMESTAMP . |
|
BigQuery no tiene una alternativa al tipo de datos VARIANT de Snowflake. |
|
BigQuery no tiene una alternativa al tipo de datos VARIANT de Snowflake. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery también ofrece las siguientes funciones de conversión, que no tienen un análogo directo en 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
Funciones de generación de datos
En la siguiente tabla se muestran las asignaciones entre las funciones de generación de datos de Snowflake habituales y sus equivalentes en BigQuery.
Copo de nieve | BigQuery |
---|---|
|
BigQuery no admite una comparación directa con la función NORMAL. |
|
Nota: BigQuery no admite la inicialización |
|
BigQuery no admite una comparación directa con la función RANDSTR. |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
BigQuery no admite una comparación directa con la función SEQ_. |
|
Nota:Usa FDUs persistentes para crear un equivalente a UNIFORM de Snowflake. Consulta un ejemplo aquí. |
UUID_STRING([uuid, name]) Nota: Snowflake devuelve 128 bits aleatorios. Snowflake admite UUIDs de las versiones 4 (aleatorios) y 5 (con nombre). |
Nota: BigQuery devuelve 122 bits aleatorios. BigQuery solo admite UUIDs de la versión 4. |
|
BigQuery no admite una comparación directa con la función ZIPF. |
Funciones de fecha y hora
En la siguiente tabla se muestran las asignaciones entre las funciones de fecha y hora de Snowflake más habituales y sus equivalentes en BigQuery. Las funciones de fecha y hora de BigQuery incluyen funciones de fecha, funciones de fecha y hora, funciones de hora y funciones de marca de tiempo.
Copo de nieve | BigQuery |
---|---|
|
|
|
Nota: source_timezone siempre es UTC en BigQuery. |
Nota: Snowflake admite fechas negativas y de desbordamiento. Por ejemplo, DATE_FROM_PARTS(2000, 1 + 24, 1) devuelve el 1 de enero del 2002. Esta opción no está disponible en BigQuery. |
|
Nota: Snowflake admite los tipos de parte del día de la semana ISO, nanosegundo y segundo, milisegundo, microsegundo y nanosegundo de la época. BigQuery no lo hace. Consulta la lista completa de tipos de piezas de Snowflake aquí
. . |
Nota: BigQuery admite los tipos de parte week(<weekday>), microsecond y millisecond. Snowflake no lo hace. Consulta la lista completa de tipos de partición de BigQuery aquí y aquí. |
Nota: Snowflake admite el tipo de parte de nanosegundo. BigQuery no lo hace. Consulta la lista completa de tipos de piezas de Snowflake aquí
. . |
Nota: BigQuery admite los tipos de parte de semana(<weekday>), semana ISO y año ISO. Snowflake no lo hace. |
|
|
Nota: Snowflake admite el cálculo de la diferencia entre dos tipos de datos de fecha, hora y marca de tiempo en esta función. |
Nota: BigQuery admite los tipos de parte de año ISO y semana(<día de la semana>). |
|
|
Nota: Snowflake admite los tipos de parte del día de la semana ISO, nanosegundo y segundo, milisegundo, microsegundo y nanosegundo de la época. BigQuery no lo hace. Consulta la lista completa de tipos de piezas de Snowflake aquí
. . |
Nota: BigQuery admite los tipos de parte week(<weekday>), microsecond y millisecond. Snowflake no lo hace. Consulta la lista completa de tipos de partición de BigQuery aquí y aquí. |
|
|
|
|
|
|
|
Nota: Es posible que tengas que cambiar el formato de dowString. Por ejemplo, "su" de Snowflake será "SUNDAY" en BigQuery. |
|
Nota: Es posible que tengas que cambiar el formato de dowString. Por ejemplo, "su" de Snowflake será "SUNDAY" en BigQuery. |
Nota: Snowflake admite tiempos de desbordamiento. Por ejemplo, TIME_FROM_PARTS(0, 100, 0) devuelve 01:40:00... Esta opción no está disponible en BigQuery. BigQuery no admite nanosegundos. |
|
|
Nota: BigQuery no admite una comparación directa y exacta con TIME_SLICE de Snowflake. Usa DATETINE_TRUNC , TIME_TRUNC o TIMESTAMP_TRUNC para el tipo de datos adecuado. |
|
|
Nota: Snowflake admite el cálculo de la diferencia entre dos tipos de datos de fecha, hora y marca de tiempo en esta función. |
Nota: BigQuery admite los tipos de parte de año ISO y semana(<día de la semana>). |
|
Nota: BigQuery requiere que las marcas de tiempo se introduzcan como tipos STRING . Ejemplo: "2008-12-25 15:30:00" |
|
|
Nota: Snowflake admite el cálculo de la diferencia entre dos tipos de datos de fecha, hora y marca de tiempo en esta función. |
Nota: BigQuery admite los tipos de parte de año ISO y semana(<día de la semana>). |
Nota: Snowflake admite el tipo de parte de nanosegundo. BigQuery no lo hace. Consulta la lista completa de tipos de piezas de Snowflake aquí
. . |
Nota: BigQuery admite los tipos de parte de semana(<weekday>), semana ISO y año ISO. Snowflake no lo hace. |
|
|
BigQuery también ofrece las siguientes funciones de fecha y hora, que no tienen una función análoga directa en Snowflake:
Esquema de información y funciones de tabla
BigQuery no admite conceptualmente muchas de las funciones de tabla y de esquema de información de Snowflake. Snowflake ofrece los siguientes esquemas de información y funciones de tabla, que no tienen un análogo directo en 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
A continuación, se muestra una lista de funciones de tabla y de esquema de información de BigQuery y Snowflake asociadas.
Copo de nieve | BigQuery |
---|---|
QUERY_HISTORY QUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_* Nota: No es una alternativa directa. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_* Nota: No es una alternativa directa. |
BigQuery ofrece los siguientes esquemas de información y funciones de tabla, que no tienen un análogo directo en Snowflake:
INFORMATION_SCHEMA.SCHEMATA
INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.VIEWS
Funciones numéricas
En la siguiente tabla se muestran las asignaciones entre las funciones numéricas comunes de Snowflake y sus equivalentes en BigQuery.
Copo de nieve | BigQuery |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nota: CEIL de BigQuery no admite la posibilidad de indicar la precisión o la escala. ROUND no te permite especificar que se redondee hacia arriba. |
|
|
|
|
|
|
|
|
|
|
|
BigQuery no tiene una alternativa directa a FACTORIAL de Snowflake. Usar una función definida por el usuario. |
|
Nota: FLOOR de BigQuery no admite la posibilidad de indicar la precisión o la escala. ROUND no te permite especificar que se redondee hacia arriba. TRUNC funciona de forma sinónima para los números positivos, pero no para los negativos, ya que evalúa el valor absoluto. |
|
Nota: No es una coincidencia exacta, pero es lo más parecido. |
|
|
|
Nota:La base predeterminada de LOG es 10. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nota: El valor devuelto por BigQuery debe ser inferior a la expresión. No se admite el valor igual. |
BigQuery también ofrece las siguientes funciones matemáticas, que no tienen un análogo directo en Snowflake:
IS_INF
IS_NAN
IEEE_DIVIDE
DIV
SAFE_DIVIDE
SAFE_MULTIPLY
SAFE_NEGATE
SAFE_ADD
SAFE_SUBTRACT
RANGE_BUCKET
Funciones de datos semiestructurados
Copo de nieve | BigQuery |
---|---|
ARRAY_APPEND |
Función personalizada definida por el usuario |
ARRAY_CAT |
ARRAY_CONCAT |
ARRAY_COMPACT |
Función personalizada definida por el usuario |
ARRAY_CONSTRUCT |
[ ] |
ARRAY_CONSTRUCT_COMPACT |
Función personalizada definida por el usuario |
ARRAY_CONTAINS |
Función personalizada definida por el usuario |
ARRAY_INSERT |
Función personalizada definida por el usuario |
ARRAY_INTERSECTION |
Función personalizada definida por el usuario |
ARRAY_POSITION |
Función personalizada definida por el usuario |
ARRAY_PREPEND |
Función personalizada definida por el usuario |
ARRAY_SIZE |
ARRAY_LENGTH |
ARRAY_SLICE |
Función personalizada definida por el usuario |
ARRAY_TO_STRING |
ARRAY_TO_STRING |
ARRAYS_OVERLAP |
Función personalizada definida por el usuario |
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 |
Función personalizada definida por el usuario |
CHECK_XML |
Función personalizada definida por el usuario |
FLATTEN |
UNNEST |
GET |
Función personalizada definida por el usuario |
GET_IGNORE_CASE |
Función personalizada definida por el usuario |
|
Función personalizada definida por el usuario |
IS_<object_type> |
Función personalizada definida por el usuario |
IS_ARRAY |
Función personalizada definida por el usuario |
IS_BINARY |
Función personalizada definida por el usuario |
IS_BOOLEAN |
Función personalizada definida por el usuario |
IS_CHAR , IS_VARCHAR |
Función personalizada definida por el usuario |
IS_DATE , IS_DATE_VALUE |
Función personalizada definida por el usuario |
IS_DECIMAL |
Función personalizada definida por el usuario |
IS_DOUBLE , IS_REAL |
Función personalizada definida por el usuario |
IS_INTEGER |
Función personalizada definida por el usuario |
IS_OBJECT |
Función personalizada definida por el usuario |
IS_TIME |
Función personalizada definida por el usuario |
IS_TIMESTAMP_* |
Función personalizada definida por el usuario |
OBJECT_CONSTRUCT |
Función personalizada definida por el usuario |
OBJECT_DELETE |
Función personalizada definida por el usuario |
OBJECT_INSERT |
Función personalizada definida por el usuario |
PARSE_JSON |
JSON_EXTRACT |
PARSE_XML |
Función personalizada definida por el usuario |
STRIP_NULL_VALUE |
Función personalizada definida por el usuario |
STRTOK_TO_ARRAY |
SPLIT |
TRY_PARSE_JSON |
Función personalizada definida por el usuario |
TYPEOF |
Función personalizada definida por el usuario |
XMLGET |
Función personalizada definida por el usuario |
Funciones de cadena y binarias
Copo de nieve | BigQuery |
---|---|
|
|
ASCII |
|
BASE64_DECODE_BINARY |
|
BASE64_DECODE_STRING |
|
BASE64_ENCODE |
|
BIT_LENGTH |
CHARACTER_LENGTH |
|
|
CHR,CHAR |
|
COLLATE |
Función personalizada definida por el usuario |
COLLATION |
Función personalizada definida por el usuario |
COMPRESS |
Función personalizada definida por el usuario |
|
CONCAT (...) de BigQuery permite concatenar cualquier número de cadenas. |
CONTAINS |
Función personalizada definida por el usuario |
DECOMPRESS_BINARY |
Función personalizada definida por el usuario |
DECOMPRESS_STRING |
Función personalizada definida por el usuario |
EDITDISTANCE |
EDIT_DISTANCE |
ENDSWITH |
Función personalizada definida por el usuario |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
Función personalizada definida por el usuario |
ILIKE ANY |
Función personalizada definida por el usuario |
INITCAP |
INITCAP |
INSERT |
Función personalizada definida por el usuario |
LEFT |
Función definida por el usuario |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
Función personalizada definida por el usuario |
LIKE ANY |
Función personalizada definida por el usuario |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
Función personalizada definida por el usuario |
OCTET_LENGTH |
Función personalizada definida por el usuario |
PARSE_IP |
Función personalizada definida por el usuario |
PARSE_URL |
Función personalizada definida por el usuario |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
Función definida por el usuario |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
Función personalizada definida por el usuario |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
Función personalizada definida por el usuario |
SHA2,SHA2_HEX |
Función personalizada definida por el usuario |
SHA2_BINARY |
Función personalizada definida por el usuario |
SOUNDEX |
Función personalizada definida por el usuario |
SPACE |
Función personalizada definida por el usuario |
SPLIT |
SPLIT |
SPLIT_PART |
Función personalizada definida por el usuario |
SPLIT_TO_TABLE |
Función personalizada definida por el usuario |
STARTSWITH |
Función personalizada definida por el usuario |
STRTOK |
Nota: Toda la cadena de argumentos del delimitador se usa como un único delimitador. El delimitador predeterminado es la coma. |
STRTOK_SPLIT_TO_TABLE |
Función personalizada definida por el usuario |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
Función personalizada definida por el usuario |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
Función personalizada definida por el usuario |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
Función personalizada definida por el usuario |
|
UPPER |
Funciones de cadena (expresiones regulares)
Copo de nieve | BigQuery |
---|---|
REGEXP |
|
REGEXP_COUNT |
Si se especifica position :
Nota: BigQuery ofrece compatibilidad con expresiones regulares mediante la biblioteca re2. Consulta la documentación de esta biblioteca para ver su sintaxis de expresiones regulares. |
REGEXP_INSTR |
Si se especifica position :
Si se especifica occurrence :
Nota: BigQuery ofrece compatibilidad con expresiones regulares mediante la biblioteca re2. Consulta la documentación de esta biblioteca para ver su sintaxis de expresiones regulares. |
|
|
REGEXP_REPLACE |
Si se especifica replace_string :
Si se especifica position :
Nota: BigQuery ofrece compatibilidad con expresiones regulares mediante la biblioteca re2. Consulta la documentación de esta biblioteca para ver su sintaxis de expresiones regulares. |
REGEXP_SUBSTR |
Si se especifica position :
Si se especifica occurrence :
Nota: BigQuery ofrece compatibilidad con expresiones regulares mediante la biblioteca re2. Consulta la documentación de esta biblioteca para ver su sintaxis de expresiones regulares. |
RLIKE |
|
Funciones del sistema
Copo de nieve | BigQuery |
---|---|
SYSTEM$ABORT_SESSION |
Función personalizada definida por el usuario |
SYSTEM$ABORT_TRANSACTION |
Función personalizada definida por el usuario |
SYSTEM$CANCEL_ALL_QUERIES |
Función personalizada definida por el usuario |
SYSTEM$CANCEL_QUERY |
Función personalizada definida por el usuario |
SYSTEM$CLUSTERING_DEPTH |
Función personalizada definida por el usuario |
SYSTEM$CLUSTERING_INFORMATION |
Función personalizada definida por el usuario |
SYSTEM$CLUSTERING_RATIO — Deprecated |
Función personalizada definida por el usuario |
SYSTEM$CURRENT_USER_TASK_NAME |
Función personalizada definida por el usuario |
SYSTEM$DATABASE_REFRESH_HISTORY |
Función personalizada definida por el usuario |
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB |
Función personalizada definida por el usuario |
SYSTEM$GET_AWS_SNS_IAM_POLICY |
Función personalizada definida por el usuario |
SYSTEM$GET_PREDECESSOR_RETURN_VALUE |
Función personalizada definida por el usuario |
SYSTEM$LAST_CHANGE_COMMIT_TIME |
Función personalizada definida por el usuario |
SYSTEM$PIPE_FORCE_RESUME |
Función personalizada definida por el usuario |
SYSTEM$PIPE_STATUS |
Función personalizada definida por el usuario |
SYSTEM$SET_RETURN_VALUE |
Función personalizada definida por el usuario |
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS |
Función personalizada definida por el usuario |
SYSTEM$STREAM_GET_TABLE_TIMESTAMP |
Función personalizada definida por el usuario |
SYSTEM$STREAM_HAS_DATA |
Función personalizada definida por el usuario |
SYSTEM$TASK_DEPENDENTS_ENABLE |
Función personalizada definida por el usuario |
SYSTEM$TYPEOF |
Función personalizada definida por el usuario |
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS |
Función personalizada definida por el usuario |
SYSTEM$WAIT |
Función personalizada definida por el usuario |
SYSTEM$WHITELIST |
Función personalizada definida por el usuario |
SYSTEM$WHITELIST_PRIVATELINK |
Función personalizada definida por el usuario |
Funciones de tabla
Copo de nieve | BigQuery | |
---|---|---|
GENERATOR |
Función personalizada definida por el usuario | |
GET_OBJECT_REFERENCES |
Función personalizada definida por el usuario | |
RESULT_SCAN |
Función personalizada definida por el usuario | |
VALIDATE |
Función personalizada definida por el usuario |
Funciones de utilidad y hash
Copo de nieve | BigQuery | |
---|---|---|
GET_DDL |
Solicitud de función | |
HASH |
HASH es una función propietaria específica de Snowflake. No se puede traducir sin conocer la lógica subyacente que usa Snowflake. |
Funciones de ventana
Copo de nieve | BigQuery | |
---|---|---|
CONDITIONAL_CHANGE_EVENT |
Función personalizada definida por el usuario | |
CONDITIONAL_TRUE_EVENT |
Función personalizada definida por el usuario | |
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 |
Función personalizada definida por el usuario | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
Función personalizada definida por el usuario |
BigQuery también admite SAFE_CAST
(expression
AS typename), que devuelve NULL si BigQuery no puede realizar una conversión (por ejemplo, SAFE_CAST
("apple"
AS INT64) devuelve NULL).
Operadores
En las siguientes secciones se enumeran los operadores de Snowflake y sus equivalentes en BigQuery.
Operadores aritméticos
En la siguiente tabla se muestran las asignaciones entre los operadores aritméticos de Snowflake y sus equivalentes en BigQuery.
Copo de nieve | BigQuery |
---|---|
|
|
|
|
|
Nota: BigQuery admite el signo menos unario estándar, pero no convierte los números enteros en formato de cadena al tipo INT64 , NUMERIC o FLOAT64 . |
|
|
|
|
|
|
|
|
|
|
Para ver los detalles de la escala y la precisión de Snowflake al realizar operaciones aritméticas, consulta la documentación de Snowflake.
Operadores de comparación
Los operadores de comparación de Snowflake y los operadores de comparación de BigQuery son los mismos.
Operadores lógicos o booleanos
Los operadores lógicos o booleanos de Snowflake y los operadores lógicos o booleanos de BigQuery son los mismos.
Operadores de conjuntos
En la siguiente tabla se muestran las asignaciones entre los operadores de conjuntos de Snowflake y sus equivalentes en BigQuery.
Copo de nieve | BigQuery |
---|---|
|
INTERSECT DISTINCT
|
Nota: MINUS y EXCEPT son sinónimos. |
|
|
|
Operadores de subconsultas
En la siguiente tabla se muestran las asignaciones entre los operadores de subconsultas de Snowflake y sus equivalentes en BigQuery.
Copo de nieve | BigQuery |
---|---|
|
BigQuery no admite una alternativa directa a ALL/ANY de Snowflake. |
|
|
|
|
|
Nota: BigQuery requiere paréntesis para separar las distintas operaciones de conjuntos. Si se repite el mismo operador de conjunto, no es necesario usar paréntesis. |
Sintaxis de DML
En esta sección se abordan las diferencias en la sintaxis del lenguaje de gestión de datos entre Snowflake y BigQuery.
INSERT
declaración
Snowflake ofrece una palabra clave DEFAULT
configurable para las columnas. En BigQuery, el valor DEFAULT
de las columnas que admiten valores nulos es NULL y DEFAULT
no se admite en las columnas obligatorias. La mayoría de las sentencias de INSERT
Snowflake
son compatibles con BigQuery. En la siguiente tabla se muestran las excepciones.
Copo de nieve | BigQuery |
---|---|
Nota: BigQuery no admite la inserción de objetos JSON con una INSERT instrucción. . |
VALUES (DEFAULT [, ...]) Nota: BigQuery no admite una alternativa directa a OVERWRITE de Snowflake. En su lugar, usa DELETE . |
|
|
... Nota:
<intoClause> representa el estándar INSERT statement , que se ha indicado más arriba. |
BigQuery no admite INSERTs de varias tablas condicionales e incondicionales. |
BigQuery también permite insertar valores mediante una subconsulta (donde uno de los valores se calcula mediante una subconsulta), lo que no se admite en Snowflake. Por ejemplo:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
COPY
declaración
Snowflake admite la copia de datos de archivos de áreas de stage a una tabla y de una tabla a un área de stage interna con nombre, a un área de stage externa con nombre y a una ubicación externa (Amazon S3, Google Cloud Storage o Microsoft Azure).
BigQuery no usa el comando COPY
de SQL para cargar datos, pero puedes usar cualquiera de las herramientas y opciones que no son de SQL para cargar datos en tablas de BigQuery. También puedes usar los receptores de la canalización de datos que se proporcionan en Apache Spark o Apache Beam para escribir datos en BigQuery.
UPDATE
declaración
La mayoría de las instrucciones de UPDATE
Snowflake son compatibles con BigQuery. En la tabla siguiente se muestran las excepciones.
Copo de nieve | BigQuery | |
---|---|---|
|
Nota: Todas las instrucciones UPDATE de BigQuery requieren la palabra clave WHERE , seguida de una condición. |
DELETE
y TRUNCATE TABLE
Las instrucciones DELETE
y TRUNCATE TABLE
son dos formas de eliminar filas de una tabla sin afectar al esquema ni a los índices de la tabla.
En Snowflake, tanto DELETE
como TRUNCATE TABLE
conservan los datos eliminados mediante la función Time Travel de Snowflake para poder recuperarlos durante el periodo de conservación de datos.
Sin embargo, DELETE no elimina el historial de carga de archivos externos ni los metadatos de carga.
En BigQuery, la instrucción DELETE
debe tener una cláusula WHERE
. Para obtener más información sobre DELETE
en BigQuery, consulta los ejemplos de BigQueryDELETE
en la documentación de DML.
Copo de nieve | BigQuery |
---|---|
|
Nota: Las instrucciones de BigQuery DELETE requieren una WHERE cláusula. |
MERGE
declaración
La instrucción MERGE
puede combinar operaciones INSERT
, UPDATE
y DELETE
en una sola instrucción "upsert" y realizar las operaciones automáticamente. La operación MERGE
debe coincidir con una fila de origen como máximo por cada fila de destino.
Las tablas de BigQuery están limitadas a 1000 declaraciones de DML al día, por lo que lo ideal es consolidar las declaraciones INSERT, UPDATE y DELETE en una sola declaración MERGE, tal como se muestra en la siguiente tabla:
Copo de nieve | BigQuery |
---|---|
Nota: Snowflake admite un parámetro de sesión ERROR_ON_NONDETERMINISTIC_MERGE para gestionar los resultados no deterministas. |
Nota: Si actualiza todas las columnas, debe incluirlas todas. |
GET
y LIST
La instrucción GET
descarga archivos de datos de una de las siguientes áreas de stage de Snowflake en un directorio o carpeta local de un equipo cliente:
- Fase interna con nombre
- Fase interna de una tabla específica
- Fase interna del usuario actual
La instrucción LIST
(LS) devuelve una lista de archivos que se han almacenado provisionalmente (es decir, que se han subido
desde un sistema de archivos local o que se han descargado de una tabla) en una de las siguientes
áreas de stage de Snowflake:
- Fase interna con nombre
- Fase externa con nombre
- Puesta en escena de una tabla específica
- Fase del usuario actual
BigQuery no admite el concepto de almacenamiento provisional y no tiene equivalentes de GET
y LIST
.
PUT
y REMOVE
La instrucción PUT
carga (es decir, coloca en un área de stage) archivos de datos de un directorio o una carpeta local de
un equipo cliente en una de las siguientes áreas de stage de Snowflake:
- Fase interna con nombre
- Fase interna de una tabla específica
- Fase interna del usuario actual
La instrucción REMOVE
(RM)
elimina los archivos que se han almacenado en uno de los siguientes
áreas de stage internos de Snowflake:
- Fase interna con nombre
- Puesta en escena de una tabla específica
- Fase del usuario actual
BigQuery no admite el concepto de almacenamiento provisional y no tiene equivalentes de PUT
y REMOVE
.
Sintaxis de DDL
En esta sección se abordan las diferencias en la sintaxis del lenguaje de definición de datos entre Snowflake y BigQuery.
DDL de bases de datos, esquemas y recursos compartidos
La mayoría de los términos de Snowflake coinciden con los de BigQuery, excepto que la base de datos de Snowflake es similar al conjunto de datos de BigQuery. Consulta la asignación detallada de la terminología de Snowflake a BigQuery.
CREATE DATABASE
declaración
Snowflake permite crear y gestionar una base de datos mediante comandos de gestión de bases de datos, mientras que BigQuery ofrece varias opciones para crear conjuntos de datos, como la consola, la CLI o las bibliotecas cliente. En esta sección se usarán comandos de la CLI de BigQuery correspondientes a los comandos de Snowflake para abordar las diferencias.
Copo de nieve | BigQuery |
---|---|
Nota: Snowflake proporciona estos requisitos para asignar nombres a las bases de datos. Solo permite 255 caracteres en el nombre. |
Nota: BigQuery tiene requisitos para los nombres de conjuntos de datos similares a los de Snowflake, pero permite que el nombre tenga hasta 1024 caracteres. |
|
No se puede sustituir el conjunto de datos en BigQuery. |
|
No se pueden crear conjuntos de datos temporales en BigQuery. |
|
Concepto no admitido en BigQuery |
|
La clonación de conjuntos de datos aún no se admite en BigQuery. |
|
BigQuery no admite la función de viaje en el tiempo a nivel de conjunto de datos. Sin embargo, se admite el viaje en el tiempo para las tablas y los resultados de las consultas. |
|
BigQuery no admite la ordenación en DDL. |
|
|
|
No se pueden crear conjuntos de datos compartidos en BigQuery. Sin embargo, los usuarios pueden compartir el conjunto de datos a través de la consola o de la interfaz de usuario una vez creado. |
Nota: Snowflake ofrece la opción de mantenimiento automático en segundo plano de las vistas materializadas en la base de datos secundaria, que no se admite en BigQuery. |
|
BigQuery también ofrece las siguientes opciones de comando bq mk
, que no tienen un análogo directo en Snowflake:
--location <dataset_location>
--default_table_expiration <time_in_seconds>
--default_partition_expiration <time_in_seconds>
ALTER DATABASE
declaración
En esta sección se usarán comandos de la CLI de BigQuery correspondientes a los comandos de Snowflake para abordar las diferencias en las instrucciones ALTER.
Copo de nieve | BigQuery |
---|---|
|
No se pueden cambiar los nombres de los conjuntos de datos en BigQuery, pero sí se pueden copiar. |
|
No se pueden intercambiar conjuntos de datos en BigQuery. |
|
BigQuery no admite la gestión de la conservación y la ordenación de datos a nivel de conjunto de datos. |
|
|
|
Concepto no admitido en BigQuery. |
|
Concepto no admitido en BigQuery. |
|
Concepto no admitido en BigQuery. |
|
Concepto no admitido en BigQuery. |
|
Concepto no admitido en BigQuery. |
|
Concepto no admitido en BigQuery. |
|
Concepto no admitido en BigQuery. |
DROP DATABASE
declaración
En esta sección se usará el comando de la CLI de BigQuery correspondiente al comando de Snowflake para abordar la diferencia en la instrucción DROP.
Copo de nieve | BigQuery |
---|---|
Nota: En Snowflake, al eliminar una base de datos, no se quita de forma permanente del sistema. Se conserva una versión de la base de datos eliminada durante el número de días especificado por el parámetro DATA_RETENTION_TIME_IN_DAYS de la base de datos. |
-r elimina todos los objetos del conjunto de datos
-d indica el conjunto de datosNota: En BigQuery, la eliminación de un conjunto de datos es permanente. Además, no se admite la eliminación en cascada a nivel del conjunto de datos, ya que se eliminan todos los datos y objetos del conjunto de datos. |
Snowflake también admite el comando UNDROP DATASET
que restaura la versión más reciente de un conjunto de datos eliminado. Actualmente, BigQuery no admite esta función a nivel de conjunto de datos.
USE DATABASE
declaración
Snowflake ofrece la opción de definir la base de datos de una sesión de usuario mediante el comando
USE DATABASE
. De esta forma, no es necesario especificar nombres de objeto completos en los comandos SQL. BigQuery no ofrece ninguna alternativa al comando USE DATABASE de Snowflake.
SHOW DATABASE
declaración
En esta sección se usará el comando de la CLI de BigQuery correspondiente al comando de Snowflake para abordar la diferencia en la instrucción SHOW.
Copo de nieve | BigQuery |
---|---|
Nota: Snowflake ofrece una única opción para enumerar y mostrar detalles sobre todas las bases de datos, incluidas las eliminadas que se encuentran dentro del periodo de conservación. |
bq ls --format=prettyjsony/o
Nota: En BigQuery, el comando ls solo proporciona nombres de conjuntos de datos e información básica, mientras que el comando show ofrece detalles como la marca de tiempo de la última modificación, las listas de control de acceso y las etiquetas de un conjunto de datos. BigQuery también proporciona más detalles sobre los conjuntos de datos a través de Information Schema. |
Nota: Con la opción TERSE, Snowflake permite mostrar solo información o campos específicos sobre los conjuntos de datos. |
Concepto no admitido en BigQuery. |
El concepto de viaje en el tiempo no se admite en BigQuery a nivel de conjunto de datos. | |
SHOW DATABASES
|
BigQuery no admite el filtrado de resultados por nombres de conjuntos de datos. Sin embargo, se puede filtrar por etiquetas. |
SHOW DATABASES
Nota: De forma predeterminada, Snowflake no limita el número de resultados. Sin embargo, el valor de LIMIT no puede superar los 10.000. |
Nota: De forma predeterminada, BigQuery solo muestra 50 resultados. |
BigQuery también ofrece las siguientes opciones de comando bq
, que no tienen un análogo directo en Snowflake:
- bq ls --format=pretty: devuelve resultados básicos con formato.
- *bq ls -a: *devuelve solo los conjuntos de datos anónimos (los que empiezan por un guion bajo).
- bq ls --all: devuelve todos los conjuntos de datos, incluidos los anónimos.
- bq ls --filter labels.key:value: devuelve los resultados filtrados por la etiqueta del conjunto de datos.
- bq ls --d: excluye los conjuntos de datos anónimos de los resultados.
- bq show --format=pretty: devuelve resultados básicos detallados con formato de todos los conjuntos de datos.
Gestión de SCHEMA
Snowflake ofrece varios comandos de gestión de esquemas similares a los comandos de gestión de bases de datos. BigQuery no admite este concepto de crear y gestionar esquemas.
Sin embargo, BigQuery te permite especificar el esquema de una tabla al cargar datos en ella y al crear una tabla vacía. También puedes usar la detección automática de esquemas para los formatos de datos admitidos.
Gestión de SHARE
Snowflake proporciona varios comandos de gestión de recursos compartidos similares a los comandos de gestión de bases de datos y esquemas. Este concepto de crear y gestionar recursos compartidos no se admite en BigQuery.
DDL de tablas, vistas y secuencias
CREATE TABLE
declaración
La mayoría de las instrucciones CREATE TABLE
de Snowflake son compatibles con BigQuery, excepto los siguientes elementos de sintaxis, que no se usan en BigQuery:
Copo de nieve | BigQuery |
---|---|
Nota: UNIQUE y PRIMARY KEY son restricciones informativas que no aplica el sistema de Snowflake. |
|
donde table_constraints están:
Nota: Las restricciones UNIQUE y PRIMARY KEY son informativas y no las aplica el sistema de Snowflake. |
Nota: BigQuery no usa las restricciones de tabla UNIQUE , PRIMARY KEY ni FOREIGN KEY . Para conseguir una optimización similar a la que proporcionan estas restricciones durante la ejecución de las consultas, crea particiones y clústeres en tus tablas de BigQuery. CLUSTER BY admite hasta cuatro columnas. |
|
Consulta este ejemplo para saber cómo usar las tablas INFORMATION_SCHEMA para copiar nombres de columnas, tipos de datos y restricciones NOT NULL en una tabla nueva. |
Nota:En Snowflake, la opción BACKUP NO se especifica para "ahorrar tiempo de procesamiento al crear y restaurar capturas, así como para reducir el espacio de almacenamiento". |
La opción de tabla BACKUP NO no se usa ni es necesaria porque BigQuery conserva automáticamente hasta 7 días de versiones históricas de todas tus tablas, sin que esto afecte al tiempo de procesamiento ni al almacenamiento facturado. |
donde table_attributes están:
|
BigQuery admite el agrupamiento en clústeres, lo que permite almacenar claves en orden. |
|
|
|
|
BigQuery también admite la instrucción DDL CREATE OR REPLACE
TABLE
, que sobrescribe una tabla si ya existe.
La instrucción CREATE TABLE
de BigQuery también admite las siguientes cláusulas, que no tienen un equivalente en Snowflake:
Para obtener más información sobre CREATE TABLE
en BigQuery, consulta los ejemplos de la instrucción CREATE TABLE
en la documentación de DDL.
ALTER TABLE
declaración
En esta sección se usarán comandos de la CLI de BigQuery correspondientes a los comandos de Snowflake para abordar las diferencias en las instrucciones ALTER de las tablas.
Copo de nieve | BigQuery |
---|---|
|
|
|
No se pueden intercambiar tablas en BigQuery. |
|
BigQuery no admite la gestión de la ordenación de datos de las tablas. |
|
|
|
|
Además, Snowflake ofrece opciones de clúster, columna y restricción para modificar tablas que no son compatibles con BigQuery.
DROP TABLE
y UNDROP TABLE
En esta sección se usará el comando de la CLI de BigQuery correspondiente al comando de Snowflake para abordar la diferencia entre las instrucciones DROP y UNDROP.
Copo de nieve | BigQuery |
---|---|
Nota: En Snowflake, al eliminar una tabla, no se quita de forma permanente del sistema. Se conserva una versión de la tabla eliminada durante el número de días especificado por el parámetro DATA_RETENTION_TIME_IN_DAYS de la base de datos. |
-f sirve para omitir la confirmación de la ejecución. -d indica el conjunto de datos. Nota: En BigQuery, la eliminación de una tabla tampoco es permanente, pero actualmente se mantiene una instantánea durante 7 días. |
|
Nota: En BigQuery, primero debes determinar la marca de tiempo UNIX de cuándo existía la tabla (en milisegundos). A continuación, copia la tabla de esa marca de tiempo en una tabla nueva. La nueva tabla debe tener un nombre diferente al de la tabla eliminada. |
CREATE EXTERNAL TABLE
declaración
BigQuery permite crear tablas externas permanentes y temporales y consultar datos directamente desde:
Snowflake permite crear una tabla externa permanente que, cuando se consulta, lee los datos de un conjunto de uno o varios archivos en un área de stage externa especificada.
En esta sección se usará el comando de la CLI de BigQuery correspondiente al comando de Snowflake para abordar las diferencias en la instrucción CREATE EXTERNAL TABLE.
Copo de nieve | BigQuery |
---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
Nota: Snowflake permite organizar los archivos que contienen los datos que se van a leer y especificar las opciones de tipo de formato de las tablas externas. BigQuery admite todos los tipos de formato de Snowflake (CSV, JSON, AVRO, PARQUET y ORC), excepto el tipo XML. |
Nota: BigQuery permite crear una tabla permanente vinculada a tu fuente de datos mediante un archivo de definición de tabla [1], un archivo de esquema JSON [2] o una definición de esquema insertada [3]. BigQuery no admite la preparación de archivos para leerlos ni la especificación de opciones de tipo de formato. |
|
Nota: Actualmente, BigQuery no admite ninguna de las opciones de parámetros opcionales que ofrece Snowflake para crear tablas externas. En cuanto a las particiones, BigQuery permite usar la pseudocolumna _FILE_NAME para crear tablas o vistas con particiones a partir de las tablas externas. Para obtener más información, consulta Consultar la pseudocolumna _FILE_NAME . |
Además, BigQuery también permite consultar datos particionados externamente en formatos AVRO, PARQUET, ORC, JSON y CSV que se almacenan en Google Cloud Storage mediante un diseño de partición de Hive predeterminado.
CREATE VIEW
declaración
En la siguiente tabla se muestran las equivalencias entre Snowflake y BigQuery para la instrucción CREATE VIEW
.
Copo de nieve | BigQuery |
---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
No compatible | CREATE VIEW IF NOT EXISTS
|
|
En BigQuery, para crear una vista, todos los objetos referenciados deben existir. BigQuery permite consultar fuentes de datos externas. |
CREATE SEQUENCE
declaración
Las secuencias no se usan en BigQuery. Esto se puede conseguir de la siguiente forma por lotes. Para obtener más información sobre las claves subrogadas y las dimensiones que cambian lentamente (SCD), consulta las siguientes guías:
|
---|
DDL de carga y descarga de datos
Snowflake admite la carga y descarga de datos mediante comandos de gestión de fases, formatos de archivo y canales. BigQuery también ofrece varias opciones para ello, como bq load, BigQuery Data Transfer Service y bq extract, entre otras. En esta sección se destacan las diferencias en el uso de estas metodologías para cargar y descargar datos.
DDL de cuenta y sesión
Los conceptos de cuenta y sesión de Snowflake no se admiten en BigQuery. BigQuery permite gestionar cuentas a todos los niveles a través de Cloud IAM. Además, BigQuery aún no admite transacciones con varias instrucciones.
Funciones definidas por el usuario (UDF)
Una función definida por el usuario te permite crear funciones para operaciones personalizadas. Estas funciones aceptan columnas de entrada, realizan acciones y devuelven el resultado de esas acciones como un valor.
Tanto Snowflake como BigQuery admiten funciones definidas por el usuario (UDF) mediante expresiones SQL y código JavaScript.
Consulta el repositorio de GitHub GoogleCloudPlatform/bigquery-utils/ para ver una biblioteca de UDFs comunes de BigQuery.
Sintaxis de CREATE FUNCTION
En la siguiente tabla se muestran las diferencias en la sintaxis de creación de UDFs de SQL entre Snowflake y BigQuery.
Copo de nieve | BigQuery |
---|---|
|
Nota: En las UDFs de SQL de BigQuery, el tipo de datos devuelto es opcional. BigQuery deduce el tipo de resultado de la función a partir del cuerpo de la función SQL cuando una consulta llama a la función. |
|
Nota:En las UDFs de SQL de BigQuery, actualmente no se admite el tipo de tabla devuelto, pero está en la hoja de ruta del producto y estará disponible pronto. Sin embargo, BigQuery admite la devolución de ARRAY de tipo STRUCT. |
Nota: Snowflake ofrece una opción segura para restringir la definición y los detalles de las funciones definidas por el usuario solo a los usuarios autorizados (es decir, los usuarios a los que se les ha concedido el rol propietario de la vista). |
Nota: La seguridad de las funciones no es un parámetro configurable en BigQuery. BigQuery permite crear roles y permisos de gestión de identidades y accesos para restringir el acceso a los datos subyacentes y a la definición de funciones. |
|
Nota: El comportamiento de la función para las entradas nulas se gestiona de forma implícita en BigQuery y no es necesario especificarlo como una opción independiente. |
|
Nota:La volatilidad de las funciones no es un parámetro configurable en BigQuery. Toda la volatilidad de las UDFs de BigQuery equivale a la volatilidad IMMUTABLE de Snowflake (es decir, no realiza búsquedas en la base de datos ni usa información que no esté directamente presente en su lista de argumentos). |
|
CREATE [OR REPLACE] FUNCTION
Nota: Si usas comillas simples o una secuencia de caracteres como las comillas 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: El comportamiento de los procedimientos con entradas nulas se gestiona de forma implícita en BigQuery y no es necesario especificarlo como una opción independiente. |
CREATE [OR REPLACE] PROCEDURE
|
Nota:La volatilidad de los procedimientos no es un parámetro configurable en BigQuery. Es equivalente a la volatilidad de IMMUTABLE de Snowflake. |
CREATE [OR REPLACE] PROCEDURE
|
Nota:Actualmente, no se pueden añadir comentarios ni descripciones en las definiciones de procedimientos de BigQuery. |
CREATE [OR REPLACE] PROCEDURE
Nota: Snowflake permite especificar el llamador o el propietario del procedimiento para la ejecución. |
Nota: Los procedimientos almacenados de BigQuery siempre se ejecutan como el llamador. |
BigQuery también admite la instrucción CREATE PROCEDURE IF NOT EXISTS
, que trata la consulta como correcta y no realiza ninguna acción si ya existe una función con el mismo nombre.
Sintaxis de DROP PROCEDURE
En la siguiente tabla se muestran las diferencias en la sintaxis de DROP FUNCTION entre Snowflake y BigQuery.
Copo de nieve | BigQuery |
---|---|
|
Nota: BigQuery no requiere el uso de la firma del procedimiento (tipo de datos del argumento) para eliminarlo. |
BigQuery requiere que especifiques el project_name
si el procedimiento no se encuentra en el proyecto actual.
Comandos de procedimiento adicionales
Snowflake proporciona comandos adicionales, como
ALTER PROCEDURE
,
DESC[RIBE] PROCEDURE
y
SHOW PROCEDURES
para gestionar los procedimientos almacenados. Actualmente, no se admiten en BigQuery.
Declaraciones SQL de metadatos y transacciones
Copo de nieve | BigQuery |
---|---|
|
BigQuery siempre usa el aislamiento de instantáneas. Para obtener más información, consulta la sección Garantías de coherencia de este documento. |
|
No se usa en BigQuery. |
|
No se usa en BigQuery. |
|
No se usa en BigQuery. |
Instrucciones SQL de varias líneas y con varias instrucciones
Tanto Snowflake como BigQuery admiten transacciones (sesiones) y, por lo tanto, admiten instrucciones separadas por puntos y comas que se ejecutan de forma coherente. Para obtener más información, consulta el artículo sobre las transacciones con varias declaraciones.
Columnas de metadatos de archivos de almacenamiento temporal
Snowflake genera automáticamente metadatos de los archivos de las áreas de almacenamiento internas y externas. Estos metadatos se pueden consultar y cargar en una tabla junto con las columnas de datos normales. Se pueden utilizar las siguientes columnas de metadatos:
Garantías de coherencia y aislamiento de transacciones
Tanto Snowflake como BigQuery son atómicos, es decir, cumplen los requisitos de ACID a nivel de mutación en muchas filas.
Transacciones
A cada transacción de Snowflake se le asigna una hora de inicio única (incluidos los milisegundos) que se establece como ID de transacción. Snowflake solo admite el nivel de aislamiento READ COMMITTED
. Sin embargo, una instrucción puede ver los cambios realizados por otra instrucción si ambas están en la misma transacción, aunque esos cambios aún no se hayan confirmado. Las transacciones de Snowflake adquieren bloqueos en los recursos (tablas) cuando se modifica ese recurso. Los usuarios pueden ajustar el tiempo máximo que esperará una instrucción bloqueada hasta que se agote el tiempo de espera. Las instrucciones DML se confirman automáticamente si el parámetro AUTOCOMMIT
está activado.
BigQuery también admite transacciones. BigQuery ayuda a asegurar el control de concurrencia optimista (el primero en confirmar gana) con el aislamiento de instantáneas, en el que una consulta lee los últimos datos confirmados antes de que empiece la consulta. Este enfoque garantiza el mismo nivel de coherencia por fila y por mutación, así como entre las filas de la misma instrucción DML, pero evita los interbloqueos. En el caso de que se realicen varias actualizaciones de DML en la misma tabla, BigQuery cambia al control de concurrencia pesimista. Las tareas de carga se pueden ejecutar de forma completamente independiente y añadir datos a las tablas. Sin embargo, BigQuery aún no proporciona un límite de transacción ni una sesión explícitos.
Restauración
Si la sesión de una transacción de Snowflake se termina de forma inesperada antes de que se confirme o se revierta la transacción, esta se queda en un estado independiente. El usuario debe ejecutar SYSTEM$ABORT_TRANSACTION para anular la transacción independiente. De lo contrario, Snowflake revertirá la transacción independiente después de cuatro horas de inactividad. Si se produce un interbloqueo, Snowflake lo detecta y selecciona la instrucción más reciente para revertirla. Si se produce un error en la instrucción DML de una transacción abierta explícitamente, los cambios se revierten, pero la transacción permanece abierta hasta que se confirma o se revierte. Las instrucciones DDL de Snowflake no se pueden deshacer, ya que se confirman automáticamente.
BigQuery admite la instrucción ROLLBACK TRANSACTION
.
No hay ninguna declaración ABORT
en BigQuery.
Límites de las bases de datos
Consulta siempre la documentación pública de BigQuery para ver las cuotas y los límites más recientes. Muchas cuotas para usuarios con grandes volúmenes se pueden aumentar poniéndose en contacto con el equipo de Asistencia de Cloud.
Todas las cuentas de Snowflake tienen límites flexibles definidos de forma predeterminada. Los límites flexibles se definen durante la creación de la cuenta y pueden variar. Muchos límites flexibles de Snowflake se pueden aumentar a través del equipo de cuentas de Snowflake o mediante una incidencia.
En la siguiente tabla se comparan los límites de las bases de datos de Snowflake y BigQuery.
Límite | Copo de nieve | BigQuery |
---|---|---|
Tamaño del texto de la 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 |