Guia de tradução de SQL do Apache Hive
Este documento detalha as semelhanças e as diferenças na sintaxe SQL entre o Apache Hive e o BigQuery para ajudar a planear a sua migração. Para migrar os seus scripts SQL em massa, use a tradução de SQL em lote. Para traduzir consultas ad hoc, use a tradução de SQL interativa.
Em alguns casos, não existe um mapeamento direto entre um elemento SQL no Hive e no BigQuery. No entanto, na maioria dos casos, o BigQuery oferece um elemento alternativo ao Hive para ajudar a alcançar a mesma funcionalidade, conforme mostrado nos exemplos neste documento.
O público-alvo deste documento são arquitetos empresariais, administradores de bases de dados, programadores de aplicações e especialistas em segurança de TI. Assume que tem conhecimentos sobre o Hive.
Tipos de dados
O Hive e o BigQuery têm sistemas de tipos de dados diferentes. Na maioria dos casos, pode mapear os tipos de dados no Hive para
tipos de dados do BigQuery
com algumas exceções, como MAP
e UNION
. O Hive suporta mais conversões de tipos implícitas do que o BigQuery. Como resultado,
o tradutor de SQL em lote insere muitas conversões 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 com chaves-valores (campo REPEAT ) |
UNION |
STRUCT com diferentes tipos |
- | GEOGRAPHY |
- | JSON |
Sintaxe de consulta
Esta secção aborda as diferenças na sintaxe de consulta entre o Hive e o BigQuery.
SELECT
declaração
A maioria das declarações SELECT
do Hive é compatível com o BigQuery. A tabela seguinte contém uma lista de
diferenças menores:
Caixa | Hive | BigQuery |
---|---|---|
Subconsulta |
|
|
Filtragem de colunas |
|
|
Expandir uma matriz |
|
|
FROM
cláusula
A cláusula FROM
numa consulta apresenta as referências de tabelas a partir das quais os dados são
selecionados. No Hive, as referências de tabelas possíveis incluem tabelas, vistas e subconsultas. O BigQuery também suporta todas estas referências de tabelas.
Pode fazer referência a tabelas do BigQuery na cláusula FROM
através do seguinte:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
O BigQuery também suporta referências de tabelas adicionais:
- Versões históricas da definição da tabela e das linhas que usam
FOR SYSTEM_TIME AS OF
- Caminhos de campos,
ou qualquer caminho que seja resolvido para um campo num tipo de dados (como um
STRUCT
) - Matrizes reduzidas
Operadores de comparação
A tabela seguinte fornece detalhes sobre a conversão de operadores do Hive para o BigQuery:
Função ou operador | Hive | BigQuery |
---|---|---|
- Menos unário * Multiplicação / Divisão + Adição - Subtração
|
Todos os tipos de números | Todos os tipos de números. Para evitar erros durante a operação de divisão, considere usar |
~ NOT bit-a-bit | OR bit-a-bit & AND bit-a-bit ^ XOU bit-a-bit
|
Tipo de dados booleano | Tipo de dados booleano. |
Shift do lado esquerdo |
|
|
Shift do lado direito |
|
|
Módulo (resto) |
X % Y Todos os tipos de números |
MOD(X, Y) |
Divisão de números inteiros | A DIV B e A/B para uma precisão detalhada |
Todos os tipos de números. Nota: para evitar erros durante a operação de divisão, considere usar |
Negação unária | ! , NOT |
NOT |
Tipos que suportam comparações de igualdade | Todos os tipos primitivos | Todos os tipos comparáveis e STRUCT .
|
a <=> b |
Não suportado. Traduza para o seguinte:
|
|
a <> b |
Não suportado. Traduza para o seguinte:
|
|
Operadores relacionais ( =, ==, !=, <, >, >= ) |
Todos os tipos primitivos | Todos os tipos comparáveis. |
Comparação de strings | RLIKE , REGEXP
|
Função integrada REGEXP_CONTAINS . Usa a sintaxe regex do BigQuery para funções de strings para os padrões de expressões regulares. |
[NOT] LIKE, [NOT] BETWEEN, IS [NOT] NULL |
A [NOT] BETWEEN B AND C, A IS [NOT] (TRUE|FALSE), A [NOT] LIKE B
|
Igual ao Hive. Além disso, o BigQuery também suporta o operador IN . |
Condições da união
O Hive e o BigQuery suportam os seguintes tipos de junções:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
e a união cruzada com vírgula implícita equivalente
Para mais informações, consulte os artigos Operação de junção e Junções do Hive.
Conversão de tipos e conversão explícita
A tabela seguinte fornece detalhes sobre a conversão de funções do Hive para o BigQuery:
Função ou operador | Hive | BigQuery |
---|---|---|
Conversão de tipo | Quando uma conversão falha, é devolvido `NULL`. | A mesma sintaxe que o Hive. Para mais informações sobre as regras de conversão de tipos do BigQuery, consulte o artigo Regras de conversão. Se a transmissão falhar, é apresentado um erro. Para ter o mesmo comportamento que o Hive, use |
SAFE chamadas de funções |
Se prefixar as chamadas de funções com SAFE , a função devolve NULL em vez de comunicar a falha. Por exemplo, SAFE.SUBSTR('foo', 0, -2) AS safe_output; devolve NULL .Nota: quando transmitir em segurança sem erros, use |
Tipos de conversões implícitas
Quando migra para o BigQuery, tem de converter a maioria das conversões implícitas do Hive em conversões explícitas do BigQuery, exceto para os seguintes tipos de dados, que o BigQuery converte implicitamente.
Do tipo BigQuery | Para o tipo do BigQuery |
---|---|
INT64 |
FLOAT64 , NUMERIC , BIGNUMERIC |
BIGNUMERIC |
FLOAT64 |
NUMERIC |
BIGNUMERIC , FLOAT64 |
O BigQuery também faz conversões implícitas para os seguintes literais:
Do tipo BigQuery | Para o tipo do BigQuery |
---|---|
STRING literal (por exemplo, "2008-12-25" ) |
DATE |
STRING literal (por exemplo, "2008-12-25 15:30:00" ) |
TIMESTAMP |
STRING literal (por exemplo, "2008-12-25T07:30:00" ) |
DATETIME |
STRING literal (por exemplo, "15:30:00" ) |
TIME |
Tipos de conversão explícitos
Se quiser converter tipos de dados do Hive que o BigQuery não converte implicitamente, use a função CAST(expression AS type)
do BigQuery.
Funções
Esta secção aborda as funções comuns usadas no Hive e no BigQuery.
Funções de agregação
A tabela seguinte mostra os mapeamentos entre funções de agregação comuns do Hive, de agregação estatística e de agregação aproximada com os respetivos equivalentes do 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))] O BigQuery não suporta os restantes argumentos definidos pelo 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
|
Funções analíticas
A tabela seguinte mostra os mapeamentos entre as funções analíticas comuns do Hive e os respetivos equivalentes no 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
|
Pode usar uma função definida pelo utilizador (UDF). |
Funções de data e hora
A tabela seguinte mostra os mapeamentos entre as funções de data e hora comuns do Hive e os respetivos equivalentes no 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
é recomendado, uma vez que este valor não tem fuso horário e é sinónimo de
CURRENT_TIMESTAMP \
CURRENT_TIMESTAMP
no 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
|
O BigQuery oferece as seguintes funções adicionais de data e hora:
Funções de string
A tabela seguinte mostra os mapeamentos entre as funções de string do Hive e os respetivos equivalentes do 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
|
O BigQuery oferece as seguintes funções de strings adicionais:
Funções matemáticas
A tabela seguinte mostra os mapeamentos entre as funções matemáticas do Hive e os respetivos equivalentes no 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
|
Use com 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)
|
O BigQuery oferece as seguintes funções matemáticas adicionais:
Funções lógicas e condicionais
A tabela seguinte mostra os mapeamentos entre as funções lógicas e condicionais do Hive e os respetivos equivalentes no 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
|
FDUs e FDAs
O BigQuery suportaUDFs, mas não funções de agregação definidas pelo utilizador (UDAFs).
Sintaxe DML
Esta secção aborda as diferenças na sintaxe da linguagem de manipulação de dados (DML) entre o Hive e o BigQuery.
INSERT
declaração
A maioria das declarações do Hive INSERT
é compatível com o BigQuery. A tabela seguinte mostra as exceções:
Hive | BigQuery |
---|---|
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
|
INSERT INTO table (...) VALUES (...);
Nota: no BigQuery, a omissão dos nomes das colunas na declaração |
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
|
O BigQuery não suporta as operações insert-overwrite.
Esta sintaxe do Hive pode ser migrada para declarações TRUNCATE e INSERT .
|
O BigQuery impõe quotas de DML que restringem o número de declarações DML que pode executar diariamente. Para tirar o melhor partido da sua quota, considere as seguintes abordagens:
Combine várias linhas numa única declaração
INSERT
, em vez de uma linha para cada operaçãoINSERT
.Combine várias declarações DML (incluindo
INSERT
) usando uma declaraçãoMERGE
.Use
CREATE TABLE ... AS SELECT
para criar e preencher novas tabelas.
UPDATE
declaração
A maioria das declarações do Hive UPDATE
é compatível com o BigQuery. A tabela seguinte mostra as exceções:
Hive | BigQuery |
---|---|
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
|
UPDATE table
Nota: todas as declarações |
DELETE
e TRUNCATE
extratos
Pode usar declarações DELETE
ou TRUNCATE
para remover linhas de uma tabela sem afetar o esquema ou os índices da tabela.
No BigQuery, a declaração DELETE
tem de ter uma cláusula WHERE
.
Para mais informações sobre o DELETE
no BigQuery, consulte os DELETE
exemplos.
Hive | BigQuery |
---|---|
DELETE FROM tablename [WHERE expression]
|
DELETE FROM table_name
WHERE TRUE
As declarações do BigQuery |
TRUNCATE [TABLE] table_name [PARTITION partition_spec];
|
TRUNCATE TABLE [[project_name.]dataset_name.]table_name
|
MERGE
declaração
A declaração MERGE
pode combinar operações INSERT
, UPDATE
e DELETE
numa única declaração upsert e executar as operações. A operação MERGE
tem de corresponder, no máximo, a uma linha de origem para cada linha de destino.
Hive | BigQuery |
---|---|
MERGE INTO
ON
|
MERGE target
USING source
Nota: tem de indicar todas as colunas que precisam de ser atualizadas. |
ALTER
declaração
A tabela seguinte fornece detalhes sobre a conversão de declarações CREATE VIEW
do Hive para o BigQuery:
Função | Hive | BigQuery |
---|---|---|
Rename table
|
ALTER TABLE table_name RENAME TO new_table_name;
|
Não suportado. Uma solução alternativa é usar uma tarefa de cópia com o nome que quer como tabela de destino e, em seguida, eliminar a antiga.
|
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];
|
A serialização e a desserialização são geridas pelo serviço BigQuery e não são configuráveis pelo utilizador.
Para saber como permitir que o BigQuery leia dados de ficheiros CSV, JSON, AVRO, PARQUET ou ORC, consulte o artigo Criar tabelas externas do Cloud Storage. Suporta formatos de exportação CSV, JSON, AVRO e PARQUET. Para mais informações, consulte Formatos de exportação e tipos de compressão. |
Table storage properties
|
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
INTO num_buckets BUCKETS;
|
Não suportado para as declarações 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), ...]
|
O equilíbrio do armazenamento para consultas de desempenho é gerido pelo serviço BigQuery e não é configurável. |
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 mais informações, consulte a declaração |
Add partition
|
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
|
Não suportado. As partições adicionais são adicionadas conforme necessário quando são carregados dados com novos valores nas colunas de partição. Para mais informações, consulte o artigo Gerir tabelas particionadas. |
Rename partition
|
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
|
Não suportado. |
Exchange partition
|
-- Move partition from table_name_1 to table_name_2
|
Não suportado. |
Recover partition
|
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
|
Não suportado. |
Drop partition
|
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE];
|
Suportado através dos seguintes métodos:
Para mais informações, consulte o artigo Elimine uma partição. |
(Un)Archive partition
|
ALTER TABLE table_name ARCHIVE PARTITION partition_spec;
ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;
|
Não suportado. |
Table and partition file format
|
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
|
Não suportado. |
Table and partition location
|
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
|
Não suportado. |
Table and partition touch
|
ALTER TABLE table_name TOUCH [PARTITION partition_spec];
|
Não suportado. |
Table and partition protection
|
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];
|
Não suportado. |
Table and partition compact
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
COMPACT 'compaction_type'[AND WAIT]
|
Não suportado. |
Table and artition concatenate
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;
|
Não suportado. |
Table and partition columns
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;
|
Não suportado para as declarações 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];
|
Não suportado. |
Sintaxe DDL
Esta secção aborda as diferenças na sintaxe da linguagem de definição de dados (LDD) entre o Hive e o BigQuery.
CREATE TABLE
e DROP TABLE
extratos
A tabela seguinte fornece detalhes sobre a conversão de declarações CREATE TABLE
do Hive para o BigQuery:
Tipo | Hive | BigQuery |
---|---|---|
Tabelas geridas | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
Tabelas particionadas | 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
Quando fizer a partição por data, descomente o seguinte:
Quando fizer a partição por data, descomente o seguinte. Recomendamos que use
|
Create Table Like:
A forma |
CREATE TABLE empty_key_value_store
|
Não suportado. |
Tabelas ordenadas em contentores (agrupadas na terminologia do BigQuery) | CREATE TABLE page_view(
|
CREATE TABLE `myproject` mydataset.page_view (
Para mais informações, consulte o artigo Crie e use tabelas agrupadas. |
Tabelas com assimetria (tabelas em que uma ou mais colunas têm valores com assimetria) | CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
|
Não suportado. |
Tabelas temporárias | CREATE TEMPORARY TABLE list_bucket_multiple (
|
Pode fazê-lo usando o tempo de expiração da seguinte forma:
|
Tabelas de transações | CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;
|
Todas as modificações de tabelas no BigQuery estão em conformidade com ACID (atomicidade, consistência, isolamento e durabilidade). |
Eliminar tabela | DROP TABLE [IF EXISTS] table_name [PURGE];
|
{DROP TABLE | DROP TABLE IF EXISTS}
|
Truncar tabela | TRUNCATE TABLE table_name [PARTITION partition_spec];
|
Não suportado. Estão disponíveis as seguintes soluções:
Nota: também é possível truncar partições específicas. Para mais informações, consulte o artigo Elimine uma partição. |
CREATE EXTERNAL TABLE
e DROP EXTERNAL TABLE
extratos
Para ver o suporte de tabelas externas no BigQuery, consulte o artigo Introdução a origens de dados externas.
CREATE VIEW
e DROP VIEW
extratos
A tabela seguinte fornece detalhes sobre a conversão de declarações CREATE VIEW
do Hive para o 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
e DROP FUNCTION
extratos
A tabela seguinte fornece detalhes sobre a conversão de procedimentos armazenados do Hive para o 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;
|
Não suportado. |
CREATE FUNCTION [db_name.]function_name AS class_name
|
Suportado para projetos na lista de autorizações como uma funcionalidade alfa.
|
DROP FUNCTION [IF EXISTS] function_name;
|
DROP FUNCTION [ IF EXISTS ] function_name
|
RELOAD FUNCTION;
|
Não suportado. |
CREATE MACRO
e DROP MACRO
extratos
A tabela seguinte fornece detalhes sobre a conversão de declarações SQL processuais usadas na criação de macros do Hive para o BigQuery com declaração e atribuição de variáveis:
Hive | BigQuery |
---|---|
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
|
Não suportado. Em alguns casos, pode substituir esta função por uma UDF. |
DROP TEMPORARY MACRO [IF EXISTS] macro_name;
|
Não suportado. |
Códigos e mensagens de erro
Os códigos de erro do Hive e os códigos de erro do BigQuery são diferentes. Se a lógica da sua aplicação estiver a detetar erros, elimine a origem do erro, porque o BigQuery não devolve os mesmos códigos de erro.
No BigQuery, é comum usar as vistas INFORMATION_SCHEMA ou o registo de auditoria para examinar os erros.
Garantias de consistência e isolamento de transações
O Hive e o BigQuery suportam transações com semântica ACID. As transações estão ativadas por predefinição no Hive 3.
Semântica ACID
O Hive suporta o isolamento de instantâneo. Quando executa uma consulta, esta recebe uma imagem consistente da base de dados, que usa até ao final da execução. O Hive oferece semântica ACID completa ao nível da linha, o que permite que uma aplicação adicione linhas quando outra aplicação lê a partir da mesma partição sem interferir entre si.
O BigQuery oferece controlo de concorrência otimista (o primeiro a confirmar ganha) com isolamento de instantâneos, em que uma consulta lê os últimos dados confirmados antes de começar. Esta abordagem garante o mesmo nível de consistência para cada linha e mutação, e entre linhas na mesma declaração DML, evitando bloqueios. Para várias atualizações de DML à mesma tabela, o BigQuery muda para o controlo de simultaneidade pessimista. As tarefas de carregamento podem ser executadas de forma independente e anexar tabelas. No entanto, o BigQuery não fornece um limite de transação explícito nem uma sessão.
Transações
O Hive não suporta transações com várias declarações. Não suporta as declarações BEGIN
, COMMIT
e ROLLBACK
. No Hive, todas as operações de linguagem são confirmadas automaticamente.
O BigQuery suporta transações com várias declarações numa única consulta ou em várias consultas quando usa sessões. Uma transação com várias declarações permite-lhe realizar operações de mutação, como inserir ou eliminar linhas de uma ou mais tabelas e confirmar ou reverter as alterações. Para mais informações, consulte o artigo Transações com vários extratos.