OceanBaseはV4.3.5 BP2からODPS Catalogをサポートし、V4.4.1バージョンではさらにHMS Catalog(Hive Metastore Catalog)メカニズムを導入し、データレイクおよびオフラインデータウェアハウスへのシームレスなアクセスを実現しています。この機能により、ユーザーは標準SQLでHive Metastore(HMS)が管理するHiveテーブル、Icebergテーブル、およびMaxCompute(ODPS)内のオフラインテーブルを直接クエリできます。
これらのテーブルは通常、ParquetやORCなどの効率的なカラムナ形式で、HDFS、OSS、S3などの分散ストレージシステムに保存されており、企業のコアデータレイクの重要な構成要素となっています。
単なるメタデータの連携とは異なり、OceanBaseはデータレイクを「読み取る」だけでなく、高性能な計算エンジンとして、データレイク上のデータに対して顕著なクエリ高速化を提供します。これは、組み込まれた複数のAP最適化機能によるものです:
- 述語プッシュダウンと列プルダウン:WHERE条件とSELECT列情報をデータソース(例:ODPS Storage API、HDFSファイル読み取り層)にプッシュダウンします。
- 並列実行とベクトル化計算:大規模テーブルのスキャンタスクを自動的に並列化し、ベクトル化エンジンを活用してカラムストアデータを効率的に処理します。
- 外部テーブルデータキャッシュ(オプション):頻繁にアクセスされる静的なデータレイクテーブルについて、データファイルのキャッシュをサポートし、繰り返しクエリの遅延を低減します。
これらの機能により、ユーザーはデータレイクやデータウェアハウス内の生データをデータベース内部に移行することなく、OceanBase内でクエリの高速化を実現できます:
- OceanBase内部のリアルタイム業務テーブル(注文、ユーザープロファイルなど)。
- データレイク内の履歴ログ、ワイドテーブル、またはIcebergテーブル(ユーザー行動、IoT時系列データなど)、およびODPSなどのクラウドネイティブデータウェアハウス内のオフラインテーブル。
これにより、OceanBaseはデータレイククエリの入口となり、「一つのクエリ、全域のデータ」という連携分析体験を真に実現します。たった一つのSQLで、データベースとデータレイク内のデータに同時にアクセスできるため、クロスソース分析のプロセスが大幅に簡素化され、データレイクの利用がよりシンプルかつ効率的になります。
デプロイと環境依存関係
クロスデータセンター構成に関する推奨事項 |
HDFSストレージの依存関係 |
|---|---|
| HMSとOBServerをクロスデータセンターで構成する場合、ネットワーク遅延によりメタデータの取得に数秒かかる可能性があり、クエリの応答時間が大幅に増加します。HMSとOBServerは、低遅延ネットワーク内に配置することを推奨します。 | プラットフォームストレージがHDFSの場合、事前にOBServerノードにJava実行環境(JDK 8/11)をデプロイし、Javaサポートを有効にする必要があります(enable_java = true)。詳細については、OceanBase JAVA SDK環境のデプロイを参照してください。 |
Catalogと外部テーブルの関係
OceanBaseは2種類の外部データアクセスモードを提供します。
モード |
適用シナリオ |
メタデータ管理 |
典型的な使用方法 |
|---|---|---|---|
| Catalogモード (HMS Catalog、ODPS Catalogなど) |
事前定義された構造化データソース(Hiveデータウェアハウス、ODPSプロジェクトなど) | メタデータの自動同期 | SET CATALOG my_hms;SELECT * FROM db1.sales; |
| 明示的外部テーブル (ファイル/JDBC/ODPS外部テーブル) |
一時ファイル、カスタムパス、またはCatalog以外のデータソース | 手動でテーブルを作成し構造を定義する | CREATE EXTERNAL TABLE t1 (...) LOCATION = 'oss://...'; |
注意
- Catalogは、基盤データ(Parquet/ORCファイル、ODPSテーブルなど)のメタデータを抽象化したものです。
- 現在のHMS CatalogはHive Metastoreへの接続のみをサポートしており、任意のHDFSパスを直接指定することはできません。HMSに登録されていないファイルにアクセスする場合は、
CREATE EXTERNAL TABLE ... LOCATIONを使用してください。
Catalogタイプ
OceanBaseでは、Catalogはデータベースオブジェクトのトップレベル名前空間であり、異なるデータソースのメタデータを整理および分離するために使用されます。OceanBaseは以下のCatalogタイプをサポートしています:
Catalogタイプ |
データソース |
サポートされるテーブルタイプ |
典型的なシナリオ |
|---|---|---|---|
| 内部Catalog | OceanBaseローカルストレージ | OceanBaseテーブル | 内部コア業務データ |
| ODPS Catalog | アリババクラウドMaxCompute(ODPS) | ODPSテーブル | ビッグデータオフライン分析 |
| HMS Catalog | Hive Metastore(HMS) | Hiveテーブル、Icebergテーブル | Hadoopエコシステム統合 |
Catalogの作成
OceanBaseにはデータベース自身のメタデータを管理するための組み込み内部Catalogがあり、手動で作成する必要はありません。外部データソースを使用する場合は、CREATE EXTERNAL CATALOG ステートメントを使用してODPS CatalogまたはHMS Catalogを作成できます。
Catalogへのアクセス
説明
現在、データカタログ機能はOceanBaseデータベースのMySQLモードでのみサポートされています。
現在のテナントのカタログを確認する
SHOW CATALOGS; ステートメントを使用して、現在のテナント内で作成されたすべてのカタログを確認できます。
例:
SHOW CATALOGS;
カタログ内のデータを確認する
カタログでは、データベース内のテーブルと同じように任意のクエリ操作を実行でき、また、複数のカタログにまたがる結合クエリも実行できます。
例:
SELECT * FROM internal.ap_db.ap_table, odps_catalog.odps_db.odps_table;
カタログ間でのデータクエリ
OceanBaseは単一のSQLで複数のカタログ(internal、hive_catalog、odps_catalogなど)にアクセスし、連携クエリを実現することをサポートしています。ユーザーは以下の2つの方法で、現在のコンテキスト以外のテーブルを参照できます。
基本原則:
- セッションのコンテキストを切り替えていない場合は、完全な3部構成の識別子を使用する必要があります:
catalog_name.database_name.table_name; - 対象のCatalogとDatabaseに切り替えた後は、略称のテーブル名を直接使用できます。
方法1:3部構成の識別子を使用する(コンテキストを切り替える必要はありません)
現在どのCatalogにいるかに関係なく、catalog.db.table の3部構成の識別子を使用して、任意のCatalog内のテーブルに直接アクセスできます。
例1:デフォルトのinternal CatalogでHMSテーブルをクエリする
-- 現在のセッションコンテキストを確認する
SELECT CURRENT_CATALOG(); -- 'internal'を返す
SELECT DATABASE(); -- またはSELECT SCHEMA()を使用して、現在のデータベースを返す。例:'ap_db'
-- カタログ間でHiveテーブルをクエリする
SELECT * FROM hive_catalog.hive_db.hive_table;
HMS Catalogでローカルテーブルをクエリする場合も同様です。catalog.db.table の3部構成の識別子を使用して直接アクセスできます。
例2:連携クエリ(混合ソース)
-- 現在internal.ap_dbにいると仮定する
SELECT CURRENT_CATALOG(); -- 'internal'を返す
SELECT DATABASE(); -- またはSELECT SCHEMA()を使用して、現在のデータベースを返す。例:'ap_db'
-- HMSテーブルとローカルテーブルに同時にアクセスする
SELECT h.*, o.*
FROM hive_catalog.hive_db.hive_table h
JOIN internal.ap_db.ap_table o ON h.id = o.id;
方法2:セッションコンテキストを切り替えた後、略称のテーブル名を使用する
SET CATALOG と USE を使用して、現在のセッションのCatalogとDatabaseを明示的に切り替えた後は、テーブル名(プレフィックスなし)を直接使用できます。
例:hive_catalog.hive_dbで連携クエリを実行する
-- CatalogとDatabaseを切り替える
SET CATALOG hive_catalog;
USE hive_db;
-- 現在のコンテキストを確認する
SELECT CURRENT_CATALOG(); -- 'hive_catalog'を返す
SELECT DATABASE(); -- 'hive_db'を返す
-- この時点でhive_db下のテーブル(例:hive_table)を直接参照できる
-- 同時に3部構成の識別子を使用して他のCatalog(例:internal)にもアクセスできる
SELECT h.*, o.*
FROM hive_table h -- 略称:現在のCatalog + DB
JOIN internal.ap_db.ap_table o ON h.id = o.id;
説明
SET CATALOGとUSEを実行しない場合、直接SELECT * FROM hive_table;を記述するとエラーが発生します。システムは現在のCatalog(例:internal)でそのテーブルを検索するためです。
- コンテキストの切り替えは、後続のステートメントにのみ影響し、接続やトランザクションの状態には影響しません。
詳細ドキュメントは CATALOGの確認 を参照してください。
Catalogの切り替え
SET CATALOG catalog_name; を使用してCatalogを切り替えるか、クエリ内で明示的に指定します。
SELECT * FROM odps_catalog.database_name.table_name;
詳細なSQL構文については、SET CATALOGを参照してください。
HMS/ODPS Catalogのサポート内容
HMS Catalogのサポート内容
アクセスモード
- 読み取り専用アクセス:すべてのHMS Catalog下のオブジェクトは読み取り専用となり、
INSERT、UPDATE、DROP TABLEなどのDML/DDL操作の実行は禁止されます。
サポートされるテーブルタイプ
テーブルタイプ |
対応フォーマット |
説明 |
|---|---|---|
| Hiveテーブル | ORC、Parquet、TextFile、CSV | - 現在、複合型ではParquet形式のARRAY型のみサポートしています。 詳細については、配列要素型の概要を参照してください。 |
| Icebergテーブル | V1 / V2 (Parquetを推奨) | Schema Evolution(列の追加・削除)、Partition Transform(bucket()、year()など)などの高度な機能をサポートします |
Hiveバージョンの互換性
Hiveバージョン |
Icebergサポートの説明 |
|---|---|
| Hive 4.x | HiveエンジンはIcebergテーブルをネイティブでサポートしており、Hiveを使用してテーブルの作成・更新が可能です。OceanBaseはHMS Catalogを通じて直接アクセスできます。 |
| Hive 1.2.x / 2.3.x / 3.1.x | Hive自体はIcebergをサポートしていません。ただし、IcebergテーブルがSpark/Flinkなどのエンジンで作成され、メタデータがHive Metastoreに登録されている場合、OceanBaseはそれを読み取ることができます。 |
重要な原則:IcebergテーブルのメタデータがHMSに正しく登録されていれば(どのエンジンによって書き込まれたかに関係なく)、OceanBaseはアクセスできます。
ODPS Catalogのサポート内容
- サポートされる操作:
SELECT、JOIN、GROUP BYなどの分析クエリ - サポートされない操作:
INSERT、UPDATE、DROP TABLEなどの書き込みまたはDDL操作 - 最適化機能:パーティションプルダウンと列プルダウンの条件を自動的に展開し、ODPSから転送するデータ量を削減します。
Catalog権限管理
OceanBaseはCatalogレベルの権限制御を提供し、きめ細かい権限付与が可能です。ユーザーは対応する権限を持っている必要があります。外部Catalog(ODPS、HMSなど)を作成、切り替え、またはクエリするには、該当する権限が必要です。
Catalog権限は2つのレベルに分かれています:
- User Level(グローバルレベル):すべてのCatalogに適用されます(MySQLモードでは*.*に相当します)
- Catalog Level(オブジェクトレベル):指定されたCatalogにのみ適用されます
MySQLモードの権限体系
権限 |
適用範囲 |
用途 |
|---|---|---|
CREATE CATALOG |
User Level | CREATE / DROP EXTERNAL CATALOG の実行を許可します |
USE CATALOG |
User LevelまたはCatalog Level | SET CATALOG、SHOW CATALOGS、SELECT FROM catalog.db.table を許可します |
構文
グローバル権限の付与
任意のCatalogを操作する必要がある管理者に適用されます:
GRANT CREATE CATALOG ON *.* TO 'user1';
GRANT USE CATALOG ON *.* TO 'user1' WITH GRANT OPTION;
REVOKE CREATE CATALOG ON *.* FROM 'user1';
REVOKE USE CATALOG ON *.* FROM 'user1';
特定Catalogの権限付与
通常ユーザーが指定されたCatalogにのみアクセスする場合に適用されます(推奨方法):
-- catalog 'odps_prod' に対するUSEとSELECT権限を付与
GRANT SELECT, USE CATALOG ON CATALOG odps_prod TO 'user1' WITH GRANT OPTION;
-- 権限の取り消し
REVOKE USE CATALOG ON CATALOG odps_prod FROM 'user1';
重要な補足説明:
- 作成者は自動的に権限を持つ
ユーザーが CREATE EXTERNAL CATALOG ... を正常に実行すると、そのCatalogに対する USE CATALOG と SELECT の権限を自動的に取得します。追加の権限付与は不要です。
例:
-- user1が実行
CREATE EXTERNAL CATALOG odps_dev TYPE = 'ODPS' ...;
-- この時点でuser1はそのCatalogを直接使用できます
SET CATALOG odps_dev;
SELECT * FROM project_db.table1 LIMIT 1;
- Catalog権限 ≠ データアクセス権限
ユーザーが USE CATALOG と SELECT の権限を取得していても、Catalog下のテーブルをクエリする際に失敗する可能性があります。その理由は以下の通りです:
- Catalog層:Hive Metastoreへの接続に使用されます(テーブル構造、パーティションなどのメタデータを取得するため)
- Location層:HDFSなどのファイルシステムに実際に保存されているデータファイルを読み取るために使用されます
これら2つの層の認証方式は別々に設定する必要があり、Hadoopクラスタのセキュリティポリシーと一致させる必要があります。
例:
-- user1はodps_prodのUSE CATALOG権限を持っています
SET CATALOG hms_prod;
USE sales_db;
-- テーブルをクエリすると失敗します
SELECT * FROM sales_log LIMIT 1;
-- エラーが発生します
-- 原因:Locationが作成されていないか、user1にそのLocationへのアクセス権限がない
-- 解決策:認証情報を含むLocationを作成
CREATE LOCATION hms_sales URL = 'hdfs://nn:8020/sales/'
CREDENTIAL (USER = 'username');
HMS CatalogとHDFSストレージの認証メカニズムの詳細については、HMS Catalogを参照してください。
権限検証の例
-- 権限付与
GRANT SELECT, USE CATALOG ON CATALOG ca1 TO zhangsan WITH GRANT OPTION;
-- 権限確認
SHOW GRANTS FOR zhangsan;
出力:
+-------------------------------------------------------------------------+
| Grants for zhangsan@% |
+-------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan' |
| GRANT SELECT, USE CATALOG ON CATALOG `ca1` TO 'zhangsan' WITH GRANT OPTION |
+-------------------------------------------------------------------------+
権限を確認するビュー
以下のシステムビューで権限を確認できます。
information_schema.USER_PRIVILEGES:ユーザーのグローバル権限oceanbase.DBA_OB_USERS/CDB_OB_USERS:ユーザー関連メタデータ情報