Apache Hive SQL 変換ガイド
このドキュメントでは、移行の計画に役立つ Apache Hive と BigQuery の間の SQL 構文の類似点と相違点について詳しく説明します。SQL スクリプトを一括で移行するには、バッチ SQL 変換を使用します。アドホック クエリを変換するには、インタラクティブ SQL 変換を使用します。
Hive と BigQuery の SQL 要素間に直接の対応関係がない場合もあります。ただし、多くの場合は、このドキュメントの例に示されているように、BigQuery には、Hive と同じ機能を実現する代わりの要素が用意されています。
このドキュメントは、エンタープライズ アーキテクト、データベース管理者、アプリケーション デベロッパー、IT セキュリティ スペシャリストを対象としています。また、Hive を詳しく知っていることを前提としています。
データ型
Hive と BigQuery では、データ型のシステムが異なります。ほとんどの場合、Hive のデータ型は BigQuery のデータ型にマッピングできますが、MAP
や UNION
などのいくつかの例外があります。Hive は、BigQuery よりも暗黙的な型キャストをサポートしています。その結果、バッチ SQL トランスレータは多数の明示的なキャストを挿入します。
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 |
キー値(REPEAT フィールド)付きの STRUCT |
UNION |
さまざまな型の STRUCT |
- | GEOGRAPHY |
- | JSON |
クエリ構文
ここでは、Hive と BigQuery のクエリ構文の違いについて説明します。
SELECT
ステートメント
Hive の SELECT
ステートメントの大部分は、BigQuery と互換性があります。次の表に小さな違いの一覧を示します。
Case | Hive | BigQuery |
---|---|---|
サブクエリ |
|
|
列のフィルタリング |
|
|
配列の展開 |
|
|
FROM
句
クエリの FROM
句には、データの選択元となるテーブル参照が列挙されます。Hive で使用できるテーブル参照は、テーブル、ビュー、およびサブクエリです。BigQuery は、これらのテーブル参照もすべてサポートしています。
FROM
句で BigQuery テーブルを参照するには、以下を使用します。
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery は、その他のテーブル参照もサポートしています。
FOR SYSTEM_TIME AS OF
を使用したテーブル定義と行の履歴バージョン- フィールドパス、すなわちデータ型(
STRUCT
など)の内部にあるフィールドに解決される任意のパス。 - フラット化された配列
比較演算子
次の表では、Hive から BigQuery への演算子の変換に関する詳細を示します。
関数または演算子 | Hive | BigQuery |
---|---|---|
- 単項のマイナス* 乗算/ 除算+ 加算- 減算 |
すべての数値型 | すべての数値型。 除算中のエラーを防ぐには、 |
~ ビットごとの NOT| ビットごとの OR& ビットごとの AND^ ビットごとの XOR |
ブール値データ型 | ブール値データ型 |
左シフト |
|
|
右シフト |
|
|
モジュロ(剰余) |
X % Y すべての数値型 |
MOD(X, Y) |
整数除算 | A DIV B 、A/B (詳細な精度) |
すべての数値型。 注: 除算中のエラーを防ぐには、 |
単項否定 | ! 、NOT |
NOT |
等価比較をサポートする型 | すべてのプリミティブ型 | すべての比較可能な型と STRUCT 。 |
a <=> b |
サポート対象外以下に変換してください。
|
|
a <> b |
サポート対象外以下に変換してください。
|
|
関係演算子( =, ==, !=, <, >, >= ) |
すべてのプリミティブ型 | すべての互換性のある型。 |
文字列の比較 | RLIKE 、REGEXP |
REGEXP_CONTAINS 組み込み関数。正規表現のパターンに、文字列関数の BigQuery 正規表現の構文を使用します。 |
[NOT] LIKE, [NOT] BETWEEN, IS [NOT] NULL |
A [NOT] BETWEEN B AND C, A IS [NOT] (TRUE|FALSE), A [NOT] LIKE B
|
Hive と同じです。BigQuery では、IN 演算子もサポートしています。 |
JOIN 条件
Hive と BigQuery はどちらも、次の種類の JOIN をサポートしています。
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
と、同等の暗黙的なカンマによるクロス結合
詳細については、Join operation と Hive Joins をご覧ください。
型変換とキャスティング
次の表に、Hive から BigQuery への関数の変換に関する詳細を示しています。
関数または演算子 | Hive | BigQuery |
---|---|---|
型のキャスティング | キャストが失敗すると、「NULL」が返されます。 | Hive と同じ構文です。BigQuery の型変換ルールの詳細については、変換ルールをご覧ください。 キャストが失敗すると、エラーが表示されます。Hive と同じ動作を得るには、代わりに |
SAFE 関数の呼び出し |
関数呼び出しの先頭に SAFE を付けると、エラーの報告ではなく、NULL が返されます。たとえば、SAFE.SUBSTR('foo', 0, -2) AS safe_output; は NULL を返します。注: エラーなしで安全にキャストする場合は、 |
暗黙的に変換されるデータ型
BigQuery に移行する際は、BigQuery によって暗黙的に変換される以下のデータ型を除き、Hive の暗黙的変換のほとんどを BigQuery の明示的変換に変換する必要があります。
変換元の BigQuery データ型 | 変換先の BigQuery データ型 |
---|---|
INT64 |
FLOAT64 、NUMERIC 、BIGNUMERIC |
BIGNUMERIC |
FLOAT64 |
NUMERIC |
BIGNUMERIC 、FLOAT64 |
また、BigQuery では、以下のリテラルに対しても暗黙的な変換が行われます。
変換元の BigQuery データ型 | 変換先の BigQuery データ型 |
---|---|
STRING リテラル(例: "2008-12-25" ) |
DATE |
STRING リテラル(例: "2008-12-25 15:30:00" ) |
TIMESTAMP |
STRING リテラル(例: "2008-12-25T07:30:00" ) |
DATETIME |
STRING リテラル(例: "15:30:00" ) |
TIME |
明示的に変換されるデータ型
BigQuery が暗黙的に変換しない Hive データ型を変換する場合は、BigQuery の CAST(expression AS type)
関数か、DATE
変換関数または TIMESTAMP
変換関数のいずれかを使用します。
関数
このセクションでは、Hive と BigQuery で使用される一般的な関数について説明します。
集計関数
次の表では、Hive の一般的な集計関数、統計集計関数、近似集計関数とそれに対応する 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 は、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
|
分析関数
次の表では、一般的な Hive 分析関数とそれに対応する 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
|
ユーザー定義関数(UDF)を使用できます。 |
日付と時刻の関数
次の表では、一般的な Hive の日時関数とそれに対応する 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 をおすすめします。この値はタイムゾーンに依存せず、Hive の CURRENT_TIMESTAMP \ CURRENT_TIMESTAMP と同義です。 |
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 では、次の日時関数も使用できます。
文字列関数
次の表では、Hive の文字列関数とそれに対応する 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 では、次の文字列関数も使用できます。
数学関数
次の表では、Hive の数学関数とそれに対応する 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
|
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 では、次の数学関数も使用できます。
論理関数と条件関数
次の表では、Hive の論理関数と条件関数、それに対応する 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 と UDAF
BigQuery は UDF をサポートしていますが、ユーザー定義の集計関数(UDAF)はサポートしていません。
DML 構文
このセクションでは、Hive と BigQuery のデータ操作言語(DML)構文の違いについて説明します。
INSERT
ステートメント
Hive の INSERT
ステートメントの大部分は、BigQuery と互換性があります。次の表に例外を示します。
Hive | BigQuery |
---|---|
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
|
INSERT INTO table (...) VALUES (...);
注: BigQuery では、ターゲット テーブル内のすべての列の値が元の順序位置に基づいて昇順で挿入されている場合にのみ、 |
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
|
BigQuery は、挿入の上書きオペレーションをサポートしていません。この Hive 構文は、TRUNCATE ステートメントと INSERT ステートメントに移行できます。 |
BigQuery では、1 日に実行できる DML ステートメントの数を制限する DML 割り当てが課されています。割り当てを最大限に利用するには、次の方法を検討してください。
INSERT
オペレーションごとに 1 行ではなく、1 つのINSERT
ステートメントで複数の行を組み合わせる。MERGE
ステートメントを使用して、複数の DML ステートメント(INSERT
を含む)を組み合わせます。CREATE TABLE ... AS SELECT
を使用して、新しいテーブルを作成してデータを入力する。
UPDATE
ステートメント
Hive の UPDATE
ステートメントの大部分は、BigQuery と互換性があります。次の表に例外を示します。
Hive | BigQuery |
---|---|
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
|
UPDATE table
注: BigQuery のすべての |
DELETE
および TRUNCATE
ステートメント
DELETE
ステートメントや TRUNCATE
ステートメントは、テーブル スキーマやインデックスに影響を与えることなくテーブルから行を削除するために使用できます。
BigQuery では、DELETE
ステートメントには WHERE
句が必要です。BigQuery における DELETE
の詳細については、DELETE
の例をご覧ください。
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
ステートメント
MERGE
ステートメントは、INSERT
、UPDATE
、および DELETE
操作を組み合わせて 1 つの「upsert」ステートメントにし、複数の操作を自動的に実行できます。MERGE
オペレーションでは、ターゲット行ごとに最大 1 つのソース行を対応させる必要があります。
Hive | BigQuery |
---|---|
MERGE INTO
ON
|
MERGE target
USING source
注: 更新が必要な列をすべて列挙する必要があります。 |
ALTER
ステートメント
次の表では、Hive から BigQuery への CREATE VIEW
ステートメントの変換に関する詳細を示します。
関数 | Hive | BigQuery |
---|---|---|
Rename table
|
ALTER TABLE table_name RENAME TO new_table_name;
|
サポート対象外対処方法としては、宛先テーブルとする名前を指定してコピージョブを使用した後、古いテーブルを削除します。
|
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];
|
シリアル化とシリアル化解除は BigQuery サービスによって管理され、ユーザーが構成することはできません。 BigQuery に CSV、JSON、AVRO、PARQUET、または ORC からデータを読み取らせる方法については、Cloud Storage 外部テーブルの作成をご覧ください。 CSV、JSON、AVRO、PARQUET のエクスポート形式をサポートします。詳細については、エクスポート形式と圧縮形式をご覧ください。 |
Table storage properties
|
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
INTO num_buckets BUCKETS;
|
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), ...]
|
パフォーマンス クエリ用のストレージのバランシングは BigQuery サービスによって管理され、構成できません。 |
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;
詳細については、 |
Add partition
|
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
|
サポート対象外パーティション列に新しい値を持つデータが読み込まれると、必要に応じてパーティションが追加されます。 詳細については、パーティション分割テーブルの管理をご覧ください。 |
Rename partition
|
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
|
サポート対象外 |
Exchange partition
|
-- Move partition from table_name_1 to table_name_2
|
サポート対象外 |
Recover partition
|
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
|
サポート対象外 |
Drop partition
|
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE];
|
以下の方法を使用してサポートされます。
詳細については、パーティションを削除するをご覧ください。 |
(Un)Archive partition
|
ALTER TABLE table_name ARCHIVE PARTITION partition_spec;
ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;
|
サポート対象外 |
Table and partition file format
|
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
|
サポート対象外 |
Table and partition location
|
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
|
サポート対象外 |
Table and partition touch
|
ALTER TABLE table_name TOUCH [PARTITION partition_spec];
|
サポート対象外 |
Table and partition protection
|
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];
|
サポート対象外 |
Table and partition compact
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
COMPACT 'compaction_type'[AND WAIT]
|
サポート対象外 |
Table and artition concatenate
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;
|
サポート対象外 |
Table and partition columns
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;
|
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];
|
サポート対象外 |
DDL 構文
このセクションでは、Hive と BigQuery のデータ定義言語(DDL)構文の違いについて説明します。
CREATE TABLE
および DROP TABLE
ステートメント
次の表では、Hive から BigQuery への CREATE TABLE
ステートメントの変換に関する詳細を示します。
型 | Hive | BigQuery |
---|---|---|
マネージド テーブル | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
パーティション分割テーブル | 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
日付でパーティショニングする場合は、以下をコメント化解除します。
日付でパーティショニングする場合は、以下をコメント化解除します。テーブルが分割されている場合は、
|
Create Table Like:
|
CREATE TABLE empty_key_value_store
|
サポート対象外 |
バケットソート テーブル(BigQuery の用語ではクラスタ化テーブル) | CREATE TABLE page_view(
|
CREATE TABLE `myproject` mydataset.page_view (
詳細については、クラスタ化テーブルの作成と使用をご覧ください。 |
スキュー テーブル(偏りのある値が 1 つ以上の列にあるテーブル) | CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
|
サポート対象外 |
一時テーブル | CREATE TEMPORARY TABLE list_bucket_multiple (
|
これは、有効期限を使用して次のように実現できます。
|
トランザクション テーブル | CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;
|
BigQuery 内のすべてのテーブルの変更は、ACID(アトミック性、整合性、独立性、耐久性)を遵守しています。 |
テーブルの削除 | DROP TABLE [IF EXISTS] table_name [PURGE];
|
{DROP TABLE | DROP TABLE IF EXISTS}
|
テーブルの切り捨て | TRUNCATE TABLE table_name [PARTITION partition_spec];
|
サポート対象外次の対策を使用できます。
注: 特定のパーティションを切り詰めることもできます。詳細については、パーティションを削除するをご覧ください。 |
CREATE EXTERNAL TABLE
および DROP EXTERNAL TABLE
ステートメント
BigQuery での外部テーブルのサポートについては、外部データソースの概要をご覧ください。
CREATE VIEW
および DROP VIEW
ステートメント
次の表では、Hive から BigQuery への CREATE VIEW
ステートメントの変換に関する詳細を示します。
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
および DROP FUNCTION
ステートメント
次の表に、Hive から 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;
|
サポート対象外 |
CREATE FUNCTION [db_name.]function_name AS class_name
|
アルファ版の機能として、許可リストに登録されたプロジェクトでサポートされています。
|
DROP FUNCTION [IF EXISTS] function_name;
|
DROP FUNCTION [ IF EXISTS ] function_name
|
RELOAD FUNCTION;
|
サポート対象外 |
CREATE MACRO
および DROP MACRO
ステートメント
次の表では、変数の宣言と割り当てで、マクロの作成に使用される手続き型 SQL ステートメントの Hive から BigQuery への変換に関する詳細を示します。
Hive | BigQuery |
---|---|
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
|
サポート対象外UDF で代用できる場合もあります。 |
DROP TEMPORARY MACRO [IF EXISTS] macro_name;
|
サポート対象外 |
エラーコードとメッセージ
Hive のエラーコードと BigQuery のエラーコードは異なります。アプリケーション ロジックでエラーをキャッチする場合、BigQuery は同じエラーコードを返さないため、エラーの原因を取り除いてください。
BigQuery では、INFORMATION_SCHEMA ビューまたは監査ロギングを使用してエラーを調べることが一般的です。
整合性の保証とトランザクション分離
Hive と BigQuery はどちらも、ACID セマンティクスを使用したトランザクションをサポートしています。Hive 3 では、トランザクションがデフォルトで有効になっています。
ACID セマンティクス
Hive は、スナップショット分離をサポートしています。クエリを実行すると、そのクエリには実行が終了するまで使用されるデータベースの整合性のあるスナップショットが提供されます。Hive は行レベルで完全な ACID セマンティクスを提供するため、アプリケーションが相互に干渉することなく、あるアプリケーションが同じパーティションから読み取るときに、別のアプリケーションが行を追加できるようにします。
BigQuery では、スナップショット分離を使用して、オプティミスティック同時実行制御(先の commit が優先)を行います。この場合、クエリは、クエリ開始前に最後に commit されたデータを読み取ります。この方法により、各行とミューテーションおよび同じ DML ステートメント内の行全体にわたって同じレベルの整合性が保証され、デッドロックも回避されます。同じテーブルに対する複数の DML 更新では、BigQuery は悲観的同時実行制御に切り替わります。読み込みジョブは個別に実行でき、テーブルを追加できますが、BigQuery は、明示的なトランザクション境界もセッションも提供しません。
トランザクション
Hive は、複数ステートメントのトランザクションをサポートしていません。また、BEGIN
、COMMIT
、ROLLBACK
ステートメントもサポートしていません。Hive では、すべての言語オペレーションが自動的に commit されます。
BigQuery は、セッションを使用する場合、1 つのクエリ内または複数のクエリにわたってマルチステートメント トランザクションをサポートします。マルチステートメント トランザクションを使用すると、1 つ以上のテーブルから行の挿入や削除、変更の commit、ロールバックなどの変更操作を実行できます。詳細については、マルチステートメント トランザクションをご覧ください。