Apache Hive から BigQuery への移行: 概要
このドキュメントでは、Apache Hive と BigQuery の違いを比較し、移行に関する主な考慮事項について説明します。移行方法の詳細については、Apache Hive 移行ガイドをご覧ください。
また、バッチ SQL 変換を使用して複数の SQL スクリプトを一括で移行することも、インタラクティブ SQL 変換を使用してアドホック クエリ変換することもできます。Apache HiveQL は、両方の SQL 変換サービスで完全にサポートされています。
機能
Hive と BigQuery はどちらも分散型のデータ ウェアハウス システムです。次の表は、その機能の概要を比較したものです。
機能 | Hive | BigQuery |
---|---|---|
可用性 | 実装方法によって異なる | 月ごとの稼働率は 99.99% 以上 |
割り当て | 実装方法によって異なる | BigQuery の割り当て |
使用可能な形式 | Avro、Parquet、ORC、テキスト | Avro、Parquet、ORC、CSV、JSON、Google ドライブ |
マネージド テーブル ストレージ | HDFS | BigQuery ストレージ(Capacitor 形式) |
外部テーブルソース | HDFS、HBase | Google Cloud Storage、Google スプレッドシート、Bigtable |
トランザクション | 制限あり。パーティション レベルでの ACID | パーティション レベルでの制限あり複数ステートメント トランザクションをサポートします。 |
API サポート | JDBC、ODBC、Thrift | JDBC、ODBC、多数の言語によるクライアント ライブラリ |
パーティショニング | サポート | 時間単位列、取り込み時間、整数の範囲 |
クラスタリング | サポート | サポート |
レプリケーション | HDFS によって異なる。データセンター間のレプリケーションは不可 | Google が管理するためデータセンター間のレプリケーションの信頼性が高い |
UDF | すべての言語 | SQL または JavaScript |
データの読み込み | バッチ、ストリーミング(制限あり) | バッチ、ストリーミング |
データ オペレーション | DDL、DML | DDL、DML、DCL、TCL |
データ型
Apache Hive と BigQuery では、データ型のシステムが異なります。MAP
や UNION
などのいくつかの例外を除き、ほとんどの場合 Hive のデータ型は BigQuery のデータ型 にマッピングできます。Apache 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 | キー値を含む STRUCT(REPEAT フィールド) |
UNION | さまざまな型の STRUCT |
- | GEOGRAPHY |
- | JSON |
ユーザーが定義した関数
Apache Hive では、Java でのユーザー定義関数(UDF)の作成がサポートされます。UDF を Hive に読み込んで、通常のクエリで使用できます。BigQuery UDF は、GoogleSQL または JavaScript で記述する必要があります。SQL UDF はパフォーマンスが優れているため、Hive UDF を SQL UDF に変換することをおすすめします。JavaScript を使用する必要がある場合は、JavaScript UDF のベスト プラクティスをご覧ください。他の言語では、BigQuery はリモート関数をサポートしており、GoogleSQL クエリから Cloud Functions または Cloud Run で関数を呼び出すことが可能です。
BigQuery ではユーザー定義の集計関数(UDAF)がサポートされません。
セキュリティ
Hive と BigQuery ではセキュリティ モデルが異なります。以降のセクションで各セキュリティ モデルについて説明します。
Hive のアクセス制御
承認機能として、Hive は SQL Standards Based Authorizationを導入し(Hive 0.13.0 で導入)、詳細なアクセス制御が可能になりました。ロールベース アクセス制御(RBAC)によって、一般的なエンタープライズ環境で大量のユーザーとデータ オブジェクトの承認を管理できます。このセキュリティ メカニズムは Hadoop ID に基づいています。Hadoop は、ID の認証に Kerberos を使用しています。
Apache Sentry と Apache Ranger によるセキュリティ
Apache Ranger と Apache Sentry は、Hive によって提供されるプラグインを使用して承認機能を実装する Apache プロジェクトです。Hive RBAC を構成しても、データを完全に保護することはできません。Hive のデータは通常、本来は非表示にするべきデータにユーザーが直接アクセスすることもできる HDFS に格納されるためです。Ranger と Sentry も、Hive の RBAC 設定から変換された POSIX ACL を使用して HDFS にデータを格納します。
BigQuery のセキュリティ
BigQuery は Identity and Access Management を使用してプロジェクト内のデータへのアクセスを制御します。BigQuery のデータセットへのアクセスを制限できます。テーブルとビューはデータセットの子リソースで、親データセットから権限を継承します。個々のテーブルに行レベルと列レベルのセキュリティを割り当てることができます。
承認済みビューと承認済みデータセットを使用してアクセスを制限することもできます。
BigQuery はデフォルトでデータを暗号化します。独自の暗号鍵を管理するには、Cloud KMS と BigQuery を使用します。
次のステップ
Apache Hive からスキーマとデータを移行する手順を確認する。
Apache Hive SQL 変換ガイドを参照する。