OceanBaseはV4.4.1バージョンから(MySQLモード)、Hive Metastore(HMS)を通じてHMSに登録されたHiveテーブルへのアクセスをサポートしています。HMSはデータベース、テーブル、パーティションなどのメタデータを提供します。テーブルデータは引き続きHDFS、OSS、S3などの外部ストレージに保存され、OceanBaseはこれらのデータコピーを保持しません。
本記事では、HMSを介してHiveテーブルにアクセスし、クエリを実行する方法について説明します。HMSカタログの作成構文、Kerberos認証、およびLocation設定の詳細については、Catalogを使用したHiveテーブルのロードを参照してください。
説明
現在、Hiveテーブルへのアクセスは、OceanBaseのMySQLモードでのみサポートされています。
機能概要
HMSを介してHiveテーブルにアクセスする場合、OceanBaseの実行プロセスは2つのステップに分かれます:
- メタデータの読み取り:HMSカタログを使用してHive Metastoreに接続し、Hiveのデータベース、テーブル、パーティション、ストレージパスなどの情報を取得します。
- データファイルの読み取り:HMSが返す
LOCATIONなどの情報に基づき、外部ストレージからORC、Parquetなどの形式のデータファイルを読み取ります。
この方法は、Hadoopエコシステム内でHiveによって管理されているテーブルに適用されます。ユーザーはOceanBaseで個々のテーブルに対して手動で列構造やファイルパスを定義する必要はありません。
現在サポートされている操作:
操作 |
サポート状況 |
|---|---|
SELECT クエリ |
サポート |
JOIN、GROUP BY などの分析文 |
サポート |
| OceanBase内部テーブルとの連携クエリ | サポート |
INSERT、UPDATE、DELETE |
サポートなし |
DROP TABLE などのDDL |
サポートなし |
前提条件
- バージョンとモード:OceanBase V4.4.1以降、MySQLモードのテナント。
- HMSサービス:OceanBaseクラスタがHive Metastore(Thriftプロトコル)にアクセス可能であること。HMSのアドレスとポートは運用側が提供します。オープンソースHiveのデフォルトポートは9083ですが、実際のデプロイでは異なる場合があります。
- ストレージアクセス:すべてのOBServerノードがHiveテーブルの基盤ストレージ(HDFS、OSS、S3など)に対する読み取り権限を持っていること。基盤ストレージがHDFSの場合は、Java SDK環境をデプロイする必要があります。OceanBaseデータベースJAVA SDK環境のデプロイを参照してください。
- 権限:現在のユーザーが
CREATE CATALOG、USE CATALOGなどのCatalog関連権限を持っていること。Kerberosまたは制限されたHDFSパスを使用する場合は、Locationに関連する認証資格情報を追加で設定する必要があります。
HMS外部テーブルアクセスモデル
アクセスパスには3つのレベルが含まれます。混同しないでください:
レベル |
機能 |
OceanBaseでの設定エントリ |
|---|---|---|
| Catalog(HMS) | Hive Metastoreに接続し、Hiveテーブルのメタデータを取得する | CREATE EXTERNAL CATALOG ... TYPE = 'HMS' |
| Location(ストレージ) | HDFSなどのストレージ上のデータファイルへのアクセスと認証 | CREATE LOCATION ...(シナリオに応じてオプション) |
| 湖表形式(Hive) | HMS内でのテーブルの編成方法 | HMS側の既存テーブル定義によって決定され、OceanBaseがメタデータを読み取った後にアクセスする |
ポイント:
- HMSはメタデータサービスであり、データの格納場所ではありません。
- Hiveテーブルのデータファイルは、HMSメタデータに記録された
LOCATIONパスに保存されます。 - Catalog権限とストレージ読み取り権限は独立しています。Catalog権限があっても、必ずしも基盤となるファイルを読み取れるわけではありません。
Hiveテーブルのデータが権限が制限されたHDFSパスにある場合、またはクラスタでKerberosが有効な場合は、HMS CatalogとLocationを個別に設定する必要があります。設定方法については、Catalogを使用したHiveテーブルのロードの認証説明を参照してください。
手順
ステップ1:HMS Catalogを作成する
CREATE EXTERNAL CATALOG hive_prod
PROPERTIES (
TYPE = 'HMS',
URI = 'thrift://hms.example.com:9083'
);
HMSまたはHDFSでKerberosが有効な場合は、PROPERTIESにPRINCIPAL、KEYTAB、KRB5CONFなどのパラメータを追加する必要があります。完全な構文とパラメータの説明については、Catalogを使用したHiveテーブルのロードを参照してください。
ステップ2:(オプション) Locationを作成する
HiveテーブルのデータがユーザーまたはKerberos資格情報を明示的に指定する必要があるHDFSパスにある場合は、Locationを作成します:
CREATE LOCATION hdfs_sales
URL = 'hdfs://namenode:8020/'
CREDENTIAL (
USERNAME = 'hive'
);
URLの特定方法:HiveでSHOW CREATE TABLE db.tableを実行し、LOCATIONフィールドからストレージのルートパスを抽出します。
ステップ3:Catalogを切り替えてクエリを実行する
方法1:セッションコンテキストを切り替える
SET CATALOG hive_prod;
USE sales_db;
SELECT * FROM customer_log
WHERE dt = '20250401'
LIMIT 100;
方法2:3部構成の識別子を使用する
SELECT city, COUNT(*)
FROM hive_prod.sales_db.customer_log
WHERE dt >= '2025-04-01'
GROUP BY city;
ステップ4:連携クエリ(オプション)
SELECT o.order_id, h.city
FROM internal.trade_db.orders o
JOIN hive_prod.sales_db.customer h ON o.user_id = h.id;
クエリ例
パーティションテーブルのクエリ
Hiveのパーティションテーブルのパーティション情報はHMSが提供します。クエリ時にWHERE句でパーティション列を指定すると、OceanBaseはパーティションの絞り込みをダウンドラフトし、スキャン範囲を縮小できます。
SET CATALOG hive_prod;
USE sales_db;
SELECT product_id, SUM(amount)
FROM sales_detail
WHERE dt = '20250401' AND region = 'cn-east'
GROUP BY product_id;
テーブル構造の確認
DESC hive_prod.sales_db.sales_detail;
SHOW CREATE TABLE hive_prod.sales_db.sales_detail;
サポート範囲
Hiveテーブルとファイル形式
テーブルタイプ |
サポートされるファイル形式 |
説明 |
|---|---|---|
| Hiveテーブル | ORC、Parquet、TextFile、CSV | 複合型は現バージョンではParquet形式のARRAY型のみサポート |
クエリ最適化
HMSのメタデータとストレージアクセスが正常である場合、OceanBaseはHiveテーブルクエリで以下をサポートします:
- パーティションプルーニング:
WHERE句でパーティション列を指定することで、スキャン範囲を絞り込めます。 - 列プルーニング:
SELECTで指定された列のみを読み取ります(ファイル形式によって異なります)。 - 述語のプッシュダウン:一部のフィルター条件がファイル読み取り層にプッシュダウンされます(実行計画に準じます)。
Hiveバージョン
Hive 1.2.x、2.3.x、3.1.x、4.xをサポートしています。Hiveのバージョンによって、テーブル定義やストレージパスの形式が異なる場合があります。実際のメタデータはHMSにて確認してください。
注意事項
- 読み取り専用アクセス:HMSを介してアクセスするHiveテーブルはすべて読み取り専用です。Hiveテーブルへの書き込みやHMS側のテーブル構造の変更はサポートされません。
- CatalogとLocationの階層設定:HMS接続失敗とHDFSの読み取り権限不足は異なる問題であり、別々に調査する必要があります。
- ネットワークデプロイメント:HMSとOBServerが異なるデータセンターに配置されている場合、メタデータ取得の遅延によりクエリ時間が増加する可能性があります。同じ低遅延ネットワーク内に配置することを推奨します。
- HMSに登録されていないファイル:データファイルがHMSにHiveテーブルとして登録されていない場合、本文で説明した方法でアクセスできません。ファイル外部テーブルまたはURL外部テーブルを使用してください。
- HMS Catalogドキュメントとの役割分担:本文はアクセスプロセスとクエリの使用方法に焦点を当てています。Kerberos、HDFS HAなどの詳細な設定については、Catalogを通じてHiveテーブルをロードするを参照してください。
関連ドキュメント
ドキュメント説明
- 本記事のポイント:HMSがHiveテーブルアクセスのパスにおいて果たす役割、およびCatalogの作成からクエリ操作までのプロセスとサポート範囲について説明します。
- 他の2記事との境界:Icebergテーブルのロードと機能の説明は含まれていません(Catalogを通じてIcebergテーブルをロードするを参照)。ODPS APIによる外部テーブルマッピングも含まれていません(ODPS外部テーブルを参照)。HMS Catalogの詳細なパラメータと認証設定については、Catalogを通じてHiveテーブルをロードするを参照してください。本記事では繰り返しません。