Leitfaden zur Apache Hive-SQL-Übersetzung
In diesem Dokument werden die Gemeinsamkeiten und Unterschiede in der SQL-Syntax zwischen Apache Hive und BigQuery beschrieben, damit Sie die Migration planen können. Wenn Sie Ihre SQL-Scripts im Bulk migrieren möchten, verwenden Sie die Batch-SQL-Übersetzung. Verwenden Sie zum Übersetzen von Ad-hoc-Abfragen die interaktive SQL-Übersetzung.
In einigen Fällen können SQL-Elemente aus Hive und BigQuery nicht direkt zugeordnet werden. In den meisten Fällen bietet BigQuery jedoch ein alternatives Element für Hive, damit Sie dieselbe Funktionalität erreichen, wie in den Beispielen in diesem Dokument gezeigt.
Dieses Dokument richtet sich an Unternehmensarchitekten, Datenbankadministratoren, Anwendungsentwickler und IT-Sicherheitsexperten. Es wird davon ausgegangen, dass Sie mit Hive vertraut sind.
Datentypen
Apache Hive und BigQuery haben unterschiedliche Datentypsysteme. In den meisten Fällen können Sie Datentypen aus Hive den BigQuery-Datentypen zuordnen. Ausnahmen sind hier z. B. MAP
und UNION
. Hive unterstützt eine weniger explizite Typumwandlung als BigQuery. Daher fügt der Batch-SQL-Übersetzer viele explizite Umwandlungen ein.
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 mit Schlüsselwerten (Feld REPEAT ) |
UNION |
STRUCT mit unterschiedlichen Typen |
- | GEOGRAPHY |
- | JSON |
Abfragesyntax
In diesem Abschnitt werden Unterschiede in der Abfragesyntax zwischen Hive und BigQuery behandelt.
SELECT
-Anweisung
Die meisten Hive-SELECT
-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle enthält eine Liste kleinerer Unterschiede:
Case | Hive | BigQuery |
---|---|---|
Unterabfrage |
|
|
Spaltenfilterung |
|
|
Maximieren eines Arrays |
|
|
FROM
-Klausel
In der FROM
-Klausel einer Abfrage werden die Tabellenreferenzen aufgelistet, aus denen Daten ausgewählt werden. In Hive können Tabellenreferenzen Tabellen, Ansichten und Unterabfragen sein. BigQuery unterstützt ebenfalls alle diese Tabellenreferenzen.
Sie können in der FROM
-Klausel auf BigQuery-Tabellen verweisen, indem Sie Folgendes verwenden:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery unterstützt auch zusätzliche Tabellenreferenzen:
- Frühere Versionen der Tabellendefinition und der Zeilen mit
FOR SYSTEM_TIME AS OF
- Feldpfade und jeden Pfad, der in ein Feld innerhalb eines Datentyps aufgelöst wird (z. B.
STRUCT
) - Vereinfachte Arrays
Vergleichsoperator
Die folgende Tabelle enthält Details zum Konvertieren von Operatoren von Hive in BigQuery:
Funktion oder Operator | Hive | BigQuery |
---|---|---|
- Unäres Minus * Multiplikation / Division + Addition - Subtraktion
|
Alle Zahlentypen | Alle Zahlentypen Verwenden Sie |
~ Bitweises NOT | Bitweises OR & Bitweises AND ^ Bitweises XOR
|
Boolescher Datentyp | Boolescher Datentyp |
Linksverschiebung |
|
|
Rechtsverschiebung |
|
|
Modulo (Rest) |
X % Y Alle Zahlentypen |
MOD(X, Y) |
Ganzzahldivision | A DIV B und A/B für detaillierte Genauigkeit |
Alle Zahlentypen Hinweis: Verwenden Sie |
Unäre Negation | ! , NOT |
NOT |
Typen, die Gleichheitsvergleiche unterstützen | Alle primitiven Typen | Alle vergleichbaren Typen und STRUCT
|
a <=> b |
Nicht unterstützt. Übersetzen Sie in Folgendes:
|
|
a <> b |
Nicht unterstützt. Übersetzen Sie in Folgendes:
|
|
Relationale Operatoren ( =, ==, !=, <, >, >= ) |
Alle primitiven Typen | Alle vergleichbaren Typen |
Stringvergleich | RLIKE , REGEXP
|
Integrierte REGEXP_CONTAINS Funktion. Verwendet die Regex-Syntax für Stringfunktionen von BigQuery für die Muster regulärer Ausdrücke. |
[NOT] LIKE, [NOT] BETWEEN, IS [NOT] NULL |
A [NOT] BETWEEN B AND C, A IS [NOT] (TRUE|FALSE), A [NOT] LIKE B
|
Identisch mit Hive. Darüber hinaus unterstützt BigQuery auch den Operator IN . |
JOIN-Bedingungen
Sowohl Hive als auch BigQuery unterstützen die folgenden Join-Typen:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
und den entsprechenden impliziten durch Komma getrennten Cross Join
Weitere Informationen finden Sie unter Join-Vorgang und Hive-Joins.
Typkonvertierung und -umwandlung
Die folgende Tabelle enthält Details zur Konvertierung von Funktionen aus Hive in BigQuery:
Funktion oder Operator | Hive | BigQuery |
---|---|---|
Typumwandlung | Wenn eine Umwandlung fehlschlägt, wird `NULL` zurückgegeben. | Gleiche Syntax wie Hive. Weitere Informationen zu BigQuery-Typkonvertierungsregeln finden Sie unter Konvertierungsregeln. Wenn die Umwandlung fehlschlägt, wird ein Fehler angezeigt. Verwenden Sie stattdessen |
SAFE -Funktionsaufrufe |
Wenn Sie Funktionsaufrufen SAFE voranstellen, gibt die Funktion NULL zurück, statt einen Fehler zu melden. Beispiel: SAFE.SUBSTR('foo', 0, -2) AS safe_output; gibt NULL zurück.Hinweis: Verwenden Sie für eine sichere Umwandlung ohne Fehler |
Implizite Konvertierungstypen
Bei der Migration zu BigQuery müssen Sie die meisten impliziten Hive-Konvertierungen in explizite BigQuery-Konvertierungen konvertieren, mit Ausnahme der folgenden Datentypen, die BigQuery implizit konvertiert.
Von BigQuery-Typ | Zu BigQuery-Typ |
---|---|
INT64 |
FLOAT64 , NUMERIC , BIGNUMERIC |
BIGNUMERIC |
FLOAT64 |
NUMERIC |
BIGNUMERIC , FLOAT64 |
BigQuery führt auch implizite Konvertierungen für die folgenden Literale durch:
Von BigQuery-Typ | Zu BigQuery-Typ |
---|---|
STRING -Literal (z. B. "2008-12-25" ) |
DATE |
STRING -Literal (z. B. "2008-12-25 15:30:00" ) |
TIMESTAMP |
STRING -Literal (z. B. "2008-12-25T07:30:00" ) |
DATETIME |
STRING -Literal (z. B. "15:30:00" ) |
TIME |
Explizite Konvertierungstypen
Wenn Sie Hive-Datentypen konvertieren möchten, die BigQuery nicht implizit konvertiert, verwenden Sie die BigQuery-CAST(expression AS type)
-Funktion oder entweder die DATE
- oder die TIMESTAMP
- Konvertierungsfunktion.
Funktionen
In diesem Abschnitt werden gängige Funktionen in Hive und BigQuery behandelt.
Aggregatfunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Hive-Aggregationsfunktionen, statistischen Aggregationsfunktionen und ungefähren Aggregationsfunktionen mit ihren BigQuery-Entsprechungen:
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 unterstützt die übrigen von Hive definierten Argumente nicht. |
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
|
Analysefunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Hive-Analysefunktionen und den BigQuery-Entsprechungen:
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
|
Es kann eine benutzerdefinierte Funktion (UDF) verwendet werden. |
Funktionen für Datum und Uhrzeit
Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Hive-Datums- und -Uhrzeitfunktionen und ihren BigQuery-Entsprechungen:
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 wird empfohlen, da dieser Wert zeitzonenunabhängig und synonym mit CURRENT_TIMESTAMP \ CURRENT_TIMESTAMP in Hive ist.
|
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 bietet die folgenden zusätzlichen Datums- und Uhrzeitfunktionen:
Stringfunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen Hive-Stringfunktionen und ihren BigQuery-Entsprechungen:
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 bietet die folgenden zusätzlichen Stringfunktionen:
Mathematische Funktionen:
Die folgende Tabelle zeigt Zuordnungen zwischen den mathematischen Hive-Funktionen und ihren BigQuery-Entsprechungen:
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
|
Wird mit ISNULL verwendet
|
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 bietet die folgenden zusätzlichen mathematischen Funktionen:
Logische und bedingte Funktionen
Die folgende Tabelle zeigt Zuordnungen zwischen logischen und bedingten Hive-Funktionen und ihren BigQuery-Entsprechungen:
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
|
UDFs und UDAFs
BigQuery unterstützt UDFs, aber keine benutzerdefinierten Aggregationsfunktionen (UDAFs).
DML-Syntax
In diesem Abschnitt werden Unterschiede in der Syntax der Datenbearbeitungssprache (Data Manipulation Language, DML) zwischen Hive und BigQuery behandelt.
INSERT
-Anweisung
Die meisten Hive-INSERT
-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle zeigt Ausnahmen:
Hive | BigQuery |
---|---|
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
|
INSERT INTO table (...) VALUES (...);
Hinweis: In BigQuery funktioniert das Weglassen von Spaltennamen in der Anweisung |
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
|
BigQuery unterstützt keine Einfügungs-/Überschreibungsvorgänge.
Diese Hive-Syntax kann zu den Anweisungen TRUNCATE und INSERT migriert werden.
|
BigQuery legt DML-Kontingente fest, die die Anzahl der DML-Anweisungen begrenzen, die Sie täglich ausführen können. Ziehen Sie die folgenden Ansätze in Betracht, um Ihr Kontingent optimal zu nutzen:
Kombinieren Sie mehrere Zeilen in einer einzigen
INSERT
-Anweisung anstelle einer Zeile für jedenINSERT
-Vorgang.Kombinieren Sie mehrere DML-Anweisungen (einschließlich
INSERT
) mithilfe einerMERGE
-Anweisung.Mit
CREATE TABLE ... AS SELECT
können Sie neue Tabellen erstellen und mit Daten füllen.
UPDATE
-Anweisung
Die meisten Hive-UPDATE
-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle zeigt Ausnahmen:
Hive | BigQuery |
---|---|
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
|
UPDATE table
Hinweis: Alle |
DELETE
- und TRUNCATE
-Anweisungen
Mit der Anweisung DELETE
oder TRUNCATE
können Sie Zeilen aus einer Tabelle entfernen, ohne dass sich dies auf das Tabellenschema oder die Indexe auswirkt.
In BigQuery muss die DELETE
-Anweisung eine WHERE
-Klausel enthalten.
Weitere Informationen zu DELETE
in BigQuery finden Sie unter DELETE
-Beispiele.
Hive | BigQuery |
---|---|
DELETE FROM tablename [WHERE expression]
|
DELETE FROM table_name
WHERE TRUE
BigQuery- |
TRUNCATE [TABLE] table_name [PARTITION partition_spec];
|
TRUNCATE TABLE [[project_name.]dataset_name.]table_name
|
MERGE
-Anweisung
Die MERGE
-Anweisung kann die Vorgänge INSERT
, UPDATE
und DELETE
in einer einzigen Upsert-Anweisung kombinieren und die Vorgänge ausführen. Der MERGE
-Vorgang darf mit maximal einer Quellzeile für jede Zielzeile übereinstimmen.
Hive | BigQuery |
---|---|
MERGE INTO
ON
|
MERGE target
USING source
Hinweis: Sie müssen alle Spalten auflisten, die aktualisiert werden müssen. |
ALTER
-Anweisung
Die folgende Tabelle enthält Details zur Konvertierung von CREATE VIEW
-Anweisungen aus Hive in BigQuery:
Funktion | Hive | BigQuery |
---|---|---|
Rename table
|
ALTER TABLE table_name RENAME TO new_table_name;
|
Nicht unterstützt. Das Problem lässt sich umgehen, wenn Sie einen Kopierjob mit dem gewünschten Namen als Zieltabelle verwenden und dann die alte Tabelle löschen.
|
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];
|
Die Serialisierung und Deserialisierung wird vom BigQuery-Dienst verwaltet und kann nicht vom Nutzer konfiguriert werden.
Informationen zum Lesen von Daten aus CSV-, JSON-, AVRO-, PARQUET- oder ORC-Dateien in BigQuery finden Sie unter Externe Cloud Storage-Tabellen erstellen. Unterstützt die Exportformate CSV, JSON, AVRO und PARQUET. Weitere Informationen finden Sie unter Exportformate und Komprimierungstypen. |
Table storage properties
|
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
INTO num_buckets BUCKETS;
|
Nicht unterstützt für ALTER -Anweisungen.
|
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), ...]
|
Die Abstimmung des Speicherplatzes für Leistungsabfragen wird vom BigQuery-Dienst verwaltet und kann nicht konfiguriert werden. |
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;
Weitere Informationen finden Sie unter |
Add partition
|
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
|
Nicht unterstützt. Bei Bedarf werden zusätzliche Partitionen hinzugefügt, wenn Daten mit neuen Werten in die Partitionsspalten geladen werden. Weitere Informationen finden Sie unter Partitionierte Tabellen verwalten. |
Rename partition
|
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
|
Nicht unterstützt. |
Exchange partition
|
-- Move partition from table_name_1 to table_name_2
|
Nicht unterstützt. |
Recover partition
|
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
|
Nicht unterstützt. |
Drop partition
|
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE];
|
Unterstützt mit den folgenden Methoden:
Weitere Informationen finden Sie unter Partition löschen. |
(Un)Archive partition
|
ALTER TABLE table_name ARCHIVE PARTITION partition_spec;
ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;
|
Nicht unterstützt. |
Table and partition file format
|
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
|
Nicht unterstützt. |
Table and partition location
|
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
|
Nicht unterstützt. |
Table and partition touch
|
ALTER TABLE table_name TOUCH [PARTITION partition_spec];
|
Nicht unterstützt. |
Table and partition protection
|
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];
|
Nicht unterstützt. |
Table and partition compact
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
COMPACT 'compaction_type'[AND WAIT]
|
Nicht unterstützt. |
Table and artition concatenate
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;
|
Nicht unterstützt. |
Table and partition columns
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;
|
Nicht unterstützt für ALTER TABLE -Anweisungen.
|
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];
|
Nicht unterstützt. |
DDL-Syntax
In diesem Abschnitt werden Unterschiede in der DDL-Syntax (Data Definition Language, Datendefinitionssprache) zwischen Hive und BigQuery behandelt.
CREATE TABLE
- und DROP TABLE
-Anweisungen
Die folgende Tabelle enthält Details zur Konvertierung von CREATE TABLE
-Anweisungen aus Hive in BigQuery:
Typ | Hive | BigQuery |
---|---|---|
Verwaltete Tabellen | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
Partitionierte Tabellen | 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
Entfernen Sie bei der Partitionierung nach Datum die Kommentarzeichen bei Folgendem:
Entfernen Sie bei der Partitionierung nach Datum die Kommentarzeichen bei Folgendem. Es wird empfohlen,
|
Create Table Like:
Mit der |
CREATE TABLE empty_key_value_store
|
Nicht unterstützt. |
Sortierte Bucket-Tabellen (in BigQuery-Terminologie geclustert) | CREATE TABLE page_view(
|
CREATE TABLE `myproject` mydataset.page_view (
Weitere Informationen finden Sie unter Geclusterte Tabellen erstellen und verwenden. |
Verzerrte Tabellen (Tabellen, in denen eine oder mehrere Spalten verzerrte Werte haben) | CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
|
Nicht unterstützt. |
Temporäre Tabellen | CREATE TEMPORARY TABLE list_bucket_multiple (
|
Dies lässt sich mithilfe der Ablaufzeit so erreichen:
|
Transaktionale Tabellen | CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;
|
Alle Tabellenänderungen in BigQuery sind ACID-konform (Atomarität, Konsistenz, Isolation, Langlebigkeit). |
Tabelle löschen | DROP TABLE [IF EXISTS] table_name [PURGE];
|
{DROP TABLE | DROP TABLE IF EXISTS}
|
Tabelle kürzen | TRUNCATE TABLE table_name [PARTITION partition_spec];
|
Nicht unterstützt. Folgende Problemumgehungen sind verfügbar:
Hinweis: Bestimmte Partitionen können ebenfalls gekürzt werden. Weitere Informationen finden Sie unter Partition löschen. |
CREATE EXTERNAL TABLE
- und DROP EXTERNAL TABLE
-Anweisungen
Informationen zur Unterstützung externer Tabellen in BigQuery finden Sie unter Einführung in externe Datenquellen.
CREATE VIEW
- und DROP VIEW
-Anweisungen
Die folgende Tabelle enthält Details zur Konvertierung von CREATE VIEW
-Anweisungen aus Hive in 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
- und DROP FUNCTION
-Anweisungen
Die folgende Tabelle enthält Details zur Konvertierung gespeicherter Prozeduren aus Hive in 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;
|
Nicht unterstützt. |
CREATE FUNCTION [db_name.]function_name AS class_name
|
Wird für Projekte auf der Zulassungsliste als Alpha-Feature unterstützt.
|
DROP FUNCTION [IF EXISTS] function_name;
|
DROP FUNCTION [ IF EXISTS ] function_name
|
RELOAD FUNCTION;
|
Nicht unterstützt. |
CREATE MACRO
- und DROP MACRO
-Anweisungen
Die folgende Tabelle enthält Details zur Konvertierung von prozeduralen SQL-Anweisungen, die beim Erstellen eines Makros aus Hive in BigQuery mit variabler Deklaration und Zuweisung verwendet werden:
Hive | BigQuery |
---|---|
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
|
Nicht unterstützt. In einigen Fällen kann dies durch eine UDF ersetzt werden. |
DROP TEMPORARY MACRO [IF EXISTS] macro_name;
|
Nicht unterstützt. |
Fehlercodes und -meldungen
Hive-Fehlercodes und BigQuery-Fehlercodes sind unterschiedlich. Wenn Ihre Anwendungslogik Fehler erkennt, beseitigen Sie die Fehlerquelle, da BigQuery nicht die gleichen Fehlercodes zurückgibt.
In BigQuery ist es üblich, Fehler mithilfe der INFORMATION_SCHEMA-Ansichten oder des Audit-Loggings zu untersuchen.
Konsistenzgarantien und Transaktionsisolation
Sowohl Hive als auch BigQuery unterstützen Transaktionen mit ACID-Semantik. Transaktionen sind in Hive 3 standardmäßig aktiviert.
ACID-Semantik
Hive unterstützt die Snapshot-Isolation. Wenn Sie eine Abfrage ausführen, wird die Abfrage mit einem konsistenten Snapshot der Datenbank bereitgestellt, der bis zum Ende der Ausführung verwendet wird. Hive bietet eine vollständige ACID-Semantik auf Zeilenebene. Damit kann eine Anwendung Zeilen hinzufügen, wenn eine andere Anwendung aus derselben Partition liest, ohne sich gegenseitig zu beeinträchtigen.
BigQuery bietet Snapshot-Isolation für eine optimistische Nebenläufigkeitserkennung (der erste Commit erhält Vorrang), bei der eine Abfrage die letzten übergebenen Daten liest, bevor die Abfrage beginnt. Dieser Ansatz garantiert die gleiche Konsistenz für jede Zeile und Mutation sowie zeilenübergreifend innerhalb derselben DML-Anweisung und vermeidet dabei Deadlocks. Bei mehreren DML-Aktualisierungen für dieselbe Tabelle wechselt BigQuery zur pessimistischen Nebenläufigkeitserkennung. Ladejobs können unabhängig ausgeführt werden und Tabellen anhängen. BigQuery bietet jedoch keine explizite Transaktionsgrenze oder Sitzung.
Transaktionen
Hive unterstützt keine Transaktionen mit mehreren Anweisungen. Die Anweisungen BEGIN
, COMMIT
und ROLLBACK
werden nicht unterstützt. In Hive werden alle Sprachvorgänge automatisch per Commit ausgeführt.
BigQuery unterstützt Transaktionen mit mehreren Anweisungen innerhalb einer einzelnen Abfrage oder über mehrere Abfragen hinweg, wenn Sie Sitzungen verwenden. Mit einer Transaktion mit mehreren Anweisungen können Sie mutierende Vorgänge, z. B. das Einfügen oder Löschen von Zeilen in einer oder mehreren Tabellen, ausführen und entweder die Änderungen übernehmen oder ein Rollback durchführen. Weitere Informationen finden Sie unter Transaktionen mit mehreren Anweisungen.