Guía de traducción de SQL de Apache Hive
En este documento se detallan las similitudes y las diferencias entre las sintaxis SQL de Apache Hive y BigQuery para ayudarte a planificar tu migración. Para migrar tus secuencias de comandos SQL en bloque, usa la traducción de SQL por lotes. Para traducir consultas ad hoc, usa la traducción interactiva de SQL.
En algunos casos, no hay una asignación directa entre un elemento SQL de Hive y BigQuery. Sin embargo, en la mayoría de los casos, BigQuery ofrece un elemento alternativo a Hive para ayudarte a conseguir la misma funcionalidad, como se muestra en los ejemplos de este documento.
Este documento está dirigido a arquitectos empresariales, administradores de bases de datos, desarrolladores de aplicaciones y especialistas en seguridad informática. Se da por supuesto que conoces Hive.
Tipos de datos
Hive y BigQuery tienen sistemas de tipos de datos diferentes. En la mayoría de los casos, puedes asignar tipos de datos de Hive a tipos de datos de BigQuery, con algunas excepciones, como MAP
y UNION
. Hive admite más conversiones de tipo implícitas que BigQuery. Como resultado, el traductor de SQL por lotes inserta muchas conversiones explícitas.
Hive | BigQuery |
---|---|
TINYINT |
INT64 |
SMALLINT |
INT64 |
INT |
INT64 |
BIGINT |
INT64 |
DECIMAL |
NUMERIC |
FLOAT |
FLOAT64 |
DOUBLE |
FLOAT64 |
BOOLEAN |
BOOL |
STRING |
STRING |
VARCHAR |
STRING |
CHAR |
STRING |
BINARY |
BYTES |
DATE |
DATE |
- | DATETIME |
- | TIME |
TIMESTAMP |
DATETIME/TIMESTAMP |
INTERVAL |
- |
ARRAY |
ARRAY |
STRUCT |
STRUCT |
MAPS |
STRUCT con pares clave-valor (campo REPEAT ) |
UNION |
STRUCT con diferentes tipos |
- | GEOGRAPHY |
- | JSON |
Sintaxis de consulta
En esta sección se abordan las diferencias en la sintaxis de las consultas entre Hive y BigQuery.
SELECT
declaración
La mayoría de las instrucciones de Hive SELECT
son compatibles con BigQuery. En la siguiente tabla se muestra una lista de
diferencias menores:
Funda | Hive | BigQuery |
---|---|---|
Subconsulta |
|
|
Filtrado de columnas |
|
|
Desglosar una matriz |
|
|
Cláusula FROM
La cláusula FROM
de una consulta muestra las referencias de las tablas de las que se seleccionan los datos. En Hive, las referencias de tabla posibles incluyen tablas, vistas y subconsultas. BigQuery también admite todas estas referencias de tabla.
Puedes hacer referencia a tablas de BigQuery en la cláusula FROM
mediante lo siguiente:
[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 (como un
STRUCT
) - Matrices acopladas
Operadores de comparación
En la siguiente tabla se proporcionan detalles sobre la conversión de operadores de Hive a BigQuery:
Función u operador | Hive | BigQuery |
---|---|---|
- Menos unario * Multiplicación / División + Suma - Resta
|
Todos los tipos de números | Todos los tipos de números. Para evitar errores durante la operación de división, puedes usar |
~ Negación bit a bit | O bit a bit & Y bit a bit ^ O exclusivo bit a bit
|
Tipo de datos booleano | Tipo de datos booleano. |
Desplazamiento a la izquierda |
|
|
Desplazamiento a la derecha |
|
|
Módulo (resto) |
X % Y Todos los tipos de números |
MOD(X, Y) |
División de números enteros | A DIV B y A/B para obtener una precisión detallada |
Todos los tipos de números. Nota: Para evitar errores durante la operación de división, puedes usar |
Negación unaria | ! , NOT |
NOT |
Tipos que admiten comparaciones de igualdad | Todos los tipos primitivos | Todos los tipos comparables y STRUCT .
|
a <=> b |
No es compatible. Traduce lo siguiente:
|
|
a <> b |
No es compatible. Traduce lo siguiente:
|
|
Operadores relacionales ( =, ==, !=, <, >, >= ) |
Todos los tipos primitivos | Todos los tipos comparables. |
Comparación de cadenas | RLIKE , REGEXP
|
Función integrada REGEXP_CONTAINS . Usa la sintaxis de expresiones regulares de BigQuery para las funciones de cadena en los patrones de expresiones regulares. |
[NOT] LIKE, [NOT] BETWEEN, IS [NOT] NULL |
A [NOT] BETWEEN B AND C, A IS [NOT] (TRUE|FALSE), A [NOT] LIKE B
|
Igual que Hive. Además, BigQuery también admite el operador IN . |
Condiciones de JOIN
Tanto Hive como BigQuery admiten los siguientes tipos de combinaciones:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
y la unión cruzada con comas implícita equivalente
Para obtener más información, consulta Operación de unión y Uniones de Hive.
Conversión de tipos y casting
En la siguiente tabla se ofrecen detalles sobre la conversión de funciones de Hive a BigQuery:
Función u operador | Hive | BigQuery |
---|---|---|
Conversión de tipos | Cuando una conversión falla, se devuelve `NULL`. | Tiene la misma sintaxis que Hive. Para obtener más información sobre las reglas de conversión de tipos de BigQuery, consulta Reglas de conversión. Si la emisión falla, verás un error. Para que se comporte igual que Hive, usa |
SAFE llamadas de funciones |
Si añades el prefijo SAFE a las llamadas de función, la función devuelve NULL en lugar de informar de un error. Por ejemplo, SAFE.SUBSTR('foo', 0, -2) AS safe_output; devuelve NULL .Nota: Si quieres enviar contenido de forma segura y sin errores, usa |
Tipos de conversión implícita
Cuando migres a BigQuery, tendrás que convertir la mayoría de tus conversiones implícitas de Hive en conversiones explícitas de BigQuery, excepto los siguientes tipos de datos, que BigQuery convierte implícitamente.
Tipo de BigQuery | Tipo de BigQuery |
---|---|
INT64 |
FLOAT64 , NUMERIC , BIGNUMERIC |
BIGNUMERIC |
FLOAT64 |
NUMERIC |
BIGNUMERIC , FLOAT64 |
BigQuery también realiza conversiones implícitas de los siguientes literales:
Tipo de BigQuery | Tipo de BigQuery |
---|---|
STRING literal (por ejemplo, "2008-12-25" ) |
DATE |
STRING literal (por ejemplo, "2008-12-25 15:30:00" ) |
TIMESTAMP |
STRING literal (por ejemplo, "2008-12-25T07:30:00" ) |
DATETIME |
STRING literal (por ejemplo, "15:30:00" ) |
TIME |
Tipos de conversión explícita
Si quieres convertir tipos de datos de Hive que BigQuery no convierte implícitamente, usa la función CAST(expression AS type)
de BigQuery.
Functions
En esta sección se describen las funciones habituales que se usan en Hive y BigQuery.
Funciones de agregación
En la siguiente tabla se muestran las asignaciones entre las funciones de agregación comunes de Hive, las funciones de agregación estadística y las funciones de agregación aproximada con sus equivalentes de BigQuery:
Hive | BigQuery |
---|---|
count(DISTINCT expr[, expr...])
|
count(DISTINCT expr[, expr...])
|
percentile_approx(DOUBLE col, array(p1 [, p2]...) [, B]) WITHIN GROUP (ORDER BY expression)
|
APPROX_QUANTILES(expression, 100)[OFFSET(CAST(TRUNC(percentile * 100) as INT64))] BigQuery no admite el resto de los argumentos que define Hive. |
AVG
|
AVG
|
X | Y
|
BIT_OR / X | Y
|
X ^ Y
|
BIT_XOR / X ^ Y
|
X & Y
|
BIT_AND / X & Y
|
COUNT
|
COUNT
|
COLLECT_SET(col), \
COLLECT_LIST(col )
|
ARRAY_AGG(col)
|
COUNT
|
COUNT
|
MAX
|
MAX
|
MIN
|
MIN
|
REGR_AVGX
|
AVG(
|
REGR_AVGY
|
AVG(
|
REGR_COUNT
|
SUM(
|
REGR_INTERCEPT
|
AVG(dep_var_expr)
|
REGR_R2
|
(COUNT(dep_var_expr) *
|
REGR_SLOPE
|
COVAR_SAMP(ind_var_expr,
|
REGR_SXX
|
SUM(POWER(ind_var_expr, 2)) - COUNT(ind_var_expr) * POWER(AVG(ind_var_expr),2)
|
REGR_SXY
|
SUM(ind_var_expr*dep_var_expr) - COUNT(ind_var_expr) * AVG(ind) * AVG(dep_var_expr)
|
REGR_SYY
|
SUM(POWER(dep_var_expr, 2)) - COUNT(dep_var_expr) * POWER(AVG(dep_var_expr),2)
|
ROLLUP
|
ROLLUP
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP, STDDEV
|
SUM
|
SUM
|
VAR_POP
|
VAR_POP
|
VAR_SAMP
|
VAR_SAMP, VARIANCE
|
CONCAT_WS
|
STRING_AGG
|
Funciones analíticas
En la siguiente tabla se muestran las asignaciones entre las funciones analíticas comunes de Hive y sus equivalentes en BigQuery:
Hive | BigQuery |
---|---|
AVG
|
AVG
|
COUNT
|
COUNT
|
COVAR_POP
|
COVAR_POP
|
COVAR_SAMP
|
COVAR_SAMP
|
CUME_DIST
|
CUME_DIST
|
DENSE_RANK
|
DENSE_RANK
|
FIRST_VALUE
|
FIRST_VALUE
|
LAST_VALUE
|
LAST_VALUE
|
LAG
|
LAG
|
LEAD
|
LEAD
|
COLLECT_LIST, \
COLLECT_SET
|
ARRAY_AGG
ARRAY_CONCAT_AGG
|
MAX
|
MAX
|
MIN
|
MIN
|
NTILE
|
NTILE(constant_integer_expression)
|
PERCENT_RANK
|
PERCENT_RANK
|
RANK ()
|
RANK
|
ROW_NUMBER
|
ROW_NUMBER
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP, STDDEV
|
SUM
|
SUM
|
VAR_POP
|
VAR_POP
|
VAR_SAMP
|
VAR_SAMP, VARIANCE
|
VARIANCE
|
VARIANCE ()
|
WIDTH_BUCKET
|
Se puede usar una función definida por el usuario (UDF). |
Funciones de fecha y hora
En la siguiente tabla se muestran las asignaciones entre las funciones de fecha y hora de Hive habituales y sus equivalentes en BigQuery:
DATE_ADD
|
DATE_ADD(date_expression, INTERVAL int64_expression date_part)
|
DATE_SUB
|
DATE_SUB(date_expression, INTERVAL int64_expression date_part)
|
CURRENT_DATE
|
CURRENT_DATE
|
CURRENT_TIME
|
CURRENT_TIME
|
CURRENT_TIMESTAMP
|
CURRENT_DATETIME
es el valor recomendado, ya que no tiene zona horaria y es sinónimo de
CURRENT_TIMESTAMP \
CURRENT_TIMESTAMP
en Hive.
|
EXTRACT(field FROM source)
|
EXTRACT(part FROM datetime_expression)
|
LAST_DAY
|
DATE_SUB( DATE_TRUNC( DATE_ADD(
|
MONTHS_BETWEEN
|
DATE_DIFF(date_expression, date_expression, MONTH)
|
NEXT_DAY
|
DATE_ADD(
|
TO_DATE
|
PARSE_DATE
|
FROM_UNIXTIME
|
UNIX_SECONDS
|
FROM_UNIXTIMESTAMP
|
FORMAT_TIMESTAMP
|
YEAR \
QUARTER \
MONTH \
HOUR \
MINUTE \
SECOND \
WEEKOFYEAR
|
EXTRACT
|
DATEDIFF
|
DATE_DIFF
|
BigQuery ofrece las siguientes funciones adicionales de fecha y hora:
Funciones de cadena
En la siguiente tabla se muestran las asignaciones entre las funciones de cadena de Hive y sus equivalentes en BigQuery:
Hive | BigQuery |
---|---|
ASCII
|
TO_CODE_POINTS(string_expr)[OFFSET(0)]
|
HEX
|
TO_HEX
|
LENGTH
|
CHAR_LENGTH
|
LENGTH
|
CHARACTER_LENGTH
|
CHR
|
CODE_POINTS_TO_STRING
|
CONCAT
|
CONCAT
|
LOWER
|
LOWER
|
LPAD
|
LPAD
|
LTRIM
|
LTRIM
|
REGEXP_EXTRACT
|
REGEXP_EXTRACT
|
REGEXP_REPLACE
|
REGEXP_REPLACE
|
REPLACE
|
REPLACE
|
REVERSE
|
REVERSE
|
RPAD
|
RPAD
|
RTRIM
|
RTRIM
|
SOUNDEX
|
SOUNDEX
|
SPLIT
|
SPLIT(instring, delimiter)[ORDINAL(tokennum)]
|
SUBSTR, \
SUBSTRING
|
SUBSTR
|
TRANSLATE
|
TRANSLATE
|
LTRIM
|
LTRIM
|
RTRIM
|
RTRIM
|
TRIM
|
TRIM
|
UPPER
|
UPPER
|
BigQuery ofrece las siguientes funciones de cadena adicionales:
Funciones matemáticas
En la siguiente tabla se muestran las asignaciones entre las funciones matemáticas de Hive y sus equivalentes en BigQuery:
Hive | BigQuery |
---|---|
ABS
|
ABS
|
ACOS
|
ACOS
|
ASIN
|
ASIN
|
ATAN
|
ATAN
|
CEIL
|
CEIL
|
CEILING
|
CEILING
|
COS
|
COS
|
FLOOR
|
FLOOR
|
GREATEST
|
GREATEST
|
LEAST
|
LEAST
|
LN
|
LN
|
LNNVL
|
Úsalo con ISNULL .
|
LOG
|
LOG
|
MOD (% operator)
|
MOD
|
POWER
|
POWER, POW
|
RAND
|
RAND
|
ROUND
|
ROUND
|
SIGN
|
SIGN
|
SIN
|
SIN
|
SQRT
|
SQRT
|
HASH
|
FARM_FINGERPRINT, MD5, SHA1, SHA256, SHA512
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP
|
TAN
|
TAN
|
TRUNC
|
TRUNC
|
NVL
|
IFNULL(expr, 0), COALESCE(exp, 0)
|
BigQuery ofrece las siguientes funciones matemáticas adicionales:
Funciones lógicas y condicionales
En la siguiente tabla se muestran las asignaciones entre las funciones lógicas y condicionales de Hive y sus equivalentes en BigQuery:
Hive | BigQuery |
---|---|
CASE
|
CASE
|
COALESCE
|
COALESCE
|
NVL
|
IFNULL(expr, 0), COALESCE(exp, 0)
|
NULLIF
|
NULLIF
|
IF
|
IF(expr, true_result, else_result)
|
ISNULL
|
IS NULL
|
ISNOTNULL
|
IS NOT NULL
|
NULLIF
|
NULLIF
|
UDF y UDAF
BigQuery admite FDU, pero no funciones de agregación definidas por el usuario (FADUs).
Sintaxis de DML
En esta sección se abordan las diferencias en la sintaxis del lenguaje de manipulación de datos (DML) entre Hive y BigQuery.
INSERT
declaración
La mayoría de las instrucciones de Hive INSERT
son compatibles con BigQuery. En la siguiente tabla se muestran las excepciones:
Hive | BigQuery |
---|---|
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
|
INSERT INTO table (...) VALUES (...);
Nota: En BigQuery, omitir los nombres de las columnas en la instrucción |
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
|
BigQuery no admite operaciones de inserción y sobrescritura.
Esta sintaxis de Hive se puede migrar a las instrucciones TRUNCATE y INSERT .
|
BigQuery impone cuotas de DML que restringen el número de instrucciones DML que puedes ejecutar al día. Para sacar el máximo partido de tu cuota, puedes seguir estos enfoques:
Combina varias filas en una sola instrucción
INSERT
, en lugar de una fila por cada operaciónINSERT
.Combina varias instrucciones DML (incluida
INSERT
) mediante una instrucciónMERGE
.Usa
CREATE TABLE ... AS SELECT
para crear y rellenar tablas.
UPDATE
declaración
La mayoría de las instrucciones de Hive UPDATE
son compatibles con BigQuery. En la siguiente tabla se muestran las excepciones:
Hive | BigQuery |
---|---|
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
|
UPDATE table
Nota: Todas las instrucciones |
DELETE
y TRUNCATE
Puedes usar las instrucciones DELETE
o TRUNCATE
para quitar filas de una tabla
sin que afecte al esquema ni a los índices de la tabla.
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 DELETE
.
Hive | BigQuery |
---|---|
DELETE FROM tablename [WHERE expression]
|
DELETE FROM table_name
WHERE TRUE
Las instrucciones de BigQuery |
TRUNCATE [TABLE] table_name [PARTITION partition_spec];
|
TRUNCATE TABLE [[project_name.]dataset_name.]table_name
|
MERGE
declaración
La instrucción MERGE
puede combinar las operaciones INSERT
, UPDATE
y DELETE
en una sola instrucción upsert y realizar las operaciones. La operación MERGE
debe coincidir con una fila de origen como máximo por cada fila de destino.
Hive | BigQuery |
---|---|
MERGE INTO
ON
|
MERGE target
USING source
Nota: Debes enumerar todas las columnas que quieras actualizar. |
ALTER
declaración
En la siguiente tabla se ofrecen detalles sobre la conversión de instrucciones CREATE VIEW
de Hive a BigQuery:
Función | Hive | BigQuery |
---|---|---|
Rename table
|
ALTER TABLE table_name RENAME TO new_table_name;
|
No es compatible. Una solución alternativa es usar un trabajo de copia con el nombre que quieras para la tabla de destino y, a continuación, eliminar la tabla antigua.
|
Table properties
|
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
|
{ALTER TABLE | ALTER TABLE IF EXISTS}
|
SerDe properties (Serialize and deserialize)
|
ALTER TABLE table_name [PARTITION partition_spec] SET SERDE serde_class_name [WITH SERDEPROPERTIES serde_properties];
|
El servicio BigQuery gestiona la serialización y deserialización, y el usuario no puede configurarlas.
Para saber cómo permitir que BigQuery lea datos de archivos CSV, JSON, AVRO, PARQUET u ORC, consulta Crear tablas externas de Cloud Storage. Admite los formatos de exportación CSV, JSON, AVRO y PARQUET. Para obtener más información, consulta Formatos de exportación y tipos de compresión. |
Table storage properties
|
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
INTO num_buckets BUCKETS;
|
No se admite en las declaraciones de ALTER .
|
Skewed table
|
Skewed:
ALTER TABLE table_name SKEWED BY (col_name1, col_name2, ...)
ON ([(col_name1_value, col_name2_value, ...) [, (col_name1_value, col_name2_value), ...]
|
El servicio BigQuery gestiona el equilibrio del almacenamiento para las consultas de rendimiento y no se puede configurar. |
Table constraints
|
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column, ...) DISABLE NOVALIDATE;
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column, ...) REFERENCES table_name(column, ...) DISABLE NOVALIDATE RELY;
|
ALTER TABLE [[project_name.]dataset_name.]table_name ADD [CONSTRAINT [IF NOT EXISTS] [constraint_name]] constraint NOT ENFORCED; ALTER TABLE [[project_name.]dataset_name.]table_name ADD PRIMARY KEY(column_list) NOT ENFORCED;
Para obtener más información, consulta la |
Add partition
|
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
|
No es compatible. Se añaden particiones adicionales según sea necesario cuando se cargan datos con nuevos valores en las columnas de partición. Para obtener más información, consulta Gestionar tablas con particiones. |
Rename partition
|
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
|
No es compatible. |
Exchange partition
|
-- Move partition from table_name_1 to table_name_2
|
No es compatible. |
Recover partition
|
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
|
No es compatible. |
Drop partition
|
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE];
|
Se admite con los siguientes métodos:
Para obtener más información, consulta Eliminar una partición. |
(Un)Archive partition
|
ALTER TABLE table_name ARCHIVE PARTITION partition_spec;
ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;
|
No es compatible. |
Table and partition file format
|
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
|
No es compatible. |
Table and partition location
|
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
|
No es compatible. |
Table and partition touch
|
ALTER TABLE table_name TOUCH [PARTITION partition_spec];
|
No es compatible. |
Table and partition protection
|
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];
|
No es compatible. |
Table and partition compact
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
COMPACT 'compaction_type'[AND WAIT]
|
No es compatible. |
Table and artition concatenate
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;
|
No es compatible. |
Table and partition columns
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;
|
No se admite en las declaraciones de ALTER TABLE .
|
Column name, type, position, and comment
|
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
[COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
|
No es compatible. |
Sintaxis de DDL
En esta sección se abordan las diferencias en la sintaxis del lenguaje de definición de datos (DDL) entre Hive y BigQuery.
CREATE TABLE
y DROP TABLE
En la siguiente tabla se ofrecen detalles sobre la conversión de instrucciones CREATE TABLE
de Hive a BigQuery:
Tipo | Hive | BigQuery |
---|---|---|
Tablas gestionadas | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
Tablas con particiones | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
Create table as select (CTAS)
|
CREATE TABLE new_key_value_store
|
CREATE TABLE `myproject`.mydataset.new_key_value_store
Cuando particiones por fecha, descomenta lo siguiente:
Cuando particiones por fecha, descomenta lo siguiente. Se recomienda usar
|
Create Table Like:
La forma |
CREATE TABLE empty_key_value_store
|
No es compatible. |
Tablas ordenadas por segmentos (en BigQuery se denominan "en clúster") | CREATE TABLE page_view(
|
CREATE TABLE `myproject` mydataset.page_view (
Para obtener más información, consulta Crear y usar tablas agrupadas en clústeres. |
Tablas sesgadas (tablas en las que una o varias columnas tienen valores sesgados) | CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
|
No es compatible. |
Tablas temporales | CREATE TEMPORARY TABLE list_bucket_multiple (
|
Para ello, puedes usar el tiempo de vencimiento de la siguiente manera:
|
Tablas transaccionales | CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;
|
Todas las modificaciones de tablas en BigQuery cumplen los requisitos de ACID (atomicidad, coherencia, aislamiento y durabilidad). |
Eliminar tabla | DROP TABLE [IF EXISTS] table_name [PURGE];
|
{DROP TABLE | DROP TABLE IF EXISTS}
|
Truncar tabla | TRUNCATE TABLE table_name [PARTITION partition_spec];
|
No es compatible. Estas son las soluciones alternativas disponibles:
Nota: También se pueden truncar particiones específicas. Para obtener más información, consulta Eliminar una partición. |
CREATE EXTERNAL TABLE
y DROP EXTERNAL TABLE
Para obtener información sobre la compatibilidad con tablas externas en BigQuery, consulta la introducción a fuentes de datos externas.
CREATE VIEW
y DROP VIEW
En la siguiente tabla se ofrecen detalles sobre la conversión de instrucciones CREATE VIEW
de Hive a BigQuery:
Hive | BigQuery |
---|---|
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name [COMMENT column_comment], ...) ]
|
{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
|
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db_name.]materialized_view_name
|
CREATE MATERIALIZED VIEW [IF NOT EXISTS] \
[project_id].[dataset_id].materialized_view_name
|
CREATE FUNCTION
y DROP FUNCTION
En la siguiente tabla se ofrecen detalles sobre la conversión de procedimientos almacenados de Hive a BigQuery:
Hive | BigQuery |
---|---|
CREATE TEMPORARY FUNCTION function_name AS class_name;
|
CREATE { TEMPORARY | TEMP } FUNCTION function_name ([named_parameter[, ...]])
|
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
|
No es compatible. |
CREATE FUNCTION [db_name.]function_name AS class_name
|
Esta función alfa está disponible para los proyectos incluidos en la lista de permitidos.
|
DROP FUNCTION [IF EXISTS] function_name;
|
DROP FUNCTION [ IF EXISTS ] function_name
|
RELOAD FUNCTION;
|
No es compatible. |
CREATE MACRO
y DROP MACRO
En la siguiente tabla se explica cómo convertir instrucciones de SQL de procedimiento usadas en la creación de macros de Hive a BigQuery con declaración y asignación de variables:
Hive | BigQuery |
---|---|
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
|
No es compatible. En algunos casos, se puede sustituir por una función definida por el usuario. |
DROP TEMPORARY MACRO [IF EXISTS] macro_name;
|
No es compatible. |
Códigos y mensajes de error
Los códigos de error de Hive y los códigos de error de BigQuery son diferentes. Si la lógica de tu aplicación detecta errores, elimina la fuente del error, ya que BigQuery no devuelve los mismos códigos de error.
En BigQuery, es habitual usar las vistas INFORMATION_SCHEMA o el registro de auditoría para examinar los errores.
Garantías de coherencia y aislamiento de transacciones
Tanto Hive como BigQuery admiten transacciones con semántica ACID. Las transacciones están habilitadas de forma predeterminada en Hive 3.
Semántica ACID
Hive admite el aislamiento de captura. Cuando ejecutas una consulta, se le proporciona una vista general coherente de la base de datos, que utiliza hasta el final de su ejecución. Hive proporciona semántica ACID completa a nivel de fila, lo que permite que una aplicación añada filas cuando otra aplicación lee de la misma partición sin interferir entre sí.
BigQuery proporciona control de simultaneidad optimista (el primero en confirmar gana) con 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 para cada fila y mutación, así como entre las filas de la misma instrucción DML, al tiempo que evita los interbloqueos. Si se realizan varias actualizaciones de DML en la misma tabla, BigQuery cambia al control de concurrencia pesimista. Las tareas de carga se pueden ejecutar de forma independiente y añadir tablas. Sin embargo, BigQuery no proporciona un límite de transacción ni una sesión explícitos.
Transacciones
Hive no admite transacciones con varias instrucciones. No admite las instrucciones BEGIN
, COMMIT
y ROLLBACK
. En Hive, todas las operaciones de lenguaje se confirman automáticamente.
BigQuery admite transacciones de varias instrucciones en una sola consulta o en varias consultas cuando se usan sesiones. Una transacción de varias instrucciones te permite realizar operaciones de mutación, como insertar o eliminar filas de una o varias tablas, y confirmar o deshacer los cambios. Para obtener más información, consulta el artículo sobre las transacciones con varias declaraciones.