機能の概要
OceanBaseは、**カタログ(Catalog)と外部テーブル(External Table)**を通じて外部データにアクセスできます。どちらも外部データへのアクセス機能ですが、メタデータの管理方法と適用シナリオが異なります:
- カタログ:外部メタデータサービス(Hive Metastore、MaxComputeプロジェクトなど)に接続し、データベースやテーブルの構造を自動的に同期します。既存のメタデータセンターを持つ構造化データソースに適しています。
- 外部テーブル:OceanBase内で手動でテーブル構造とアクセスパスを定義します。ファイルパス、一時データ、単一テーブルのマッピングなどのシナリオに適しています。
OceanBaseはV4.3.5 BP2からODPS Catalogを、V4.4.1からHMS Catalogをサポートしています。Catalogを利用することで、HMSが管理するHiveテーブル、Icebergテーブル、およびMaxCompute(ODPS)内のテーブルをクエリできます。クエリ時には、internal Catalog内の内部テーブルと連携して連携分析を実行できます。
説明
現在、Catalog機能はOceanBaseのMySQLモードでのみサポートされています。
デプロイメントと環境依存関係
項目 |
説明 |
|---|---|
| クロスデータセンターデプロイメント | HMSとOBServerが異なるデータセンターに配置されている場合、メタデータ取得の遅延が秒単位に達する可能性があり、クエリ時間に影響を与えます。HMSとOBServerは、同じ低遅延ネットワーク内にデプロイすることを推奨します。 |
| HDFSストレージ | ベースストレージがHDFSの場合、OBServerノードにJava実行環境(JDK 8/11)をデプロイし、Javaサポートを有効にする必要があります(ob_enable_java_env = true)。詳細については、OceanBase JAVA SDK環境のデプロイを参照してください。 |
Catalogと外部テーブルの関係
OceanBaseが外部データにアクセスする際には、以下の階層が関わります。混同しないでください:
階層 |
説明 |
|---|---|
| 外部ストレージ | データファイルの物理的位置、例:HDFS、OSS、S3 |
| メタデータ | データベース、テーブル、パーティションなどの構造情報。HMS、ODPS、またはOceanBaseの外部テーブルによって定義・維持されます |
| アクセスエントリ | Catalogまたは外部テーブル。外部データをSQLクエリシステムに取り込みます |
OceanBaseは、以下の2種類の外部データアクセスモードを提供します:
モード |
メタデータソース |
適用シナリオ |
典型的な使い方 |
|---|---|---|---|
| Catalogモード | 外部メタデータサービスからの自動同期 | Hiveデータウェアハウス、ODPSプロジェクトなど、既存のメタデータセンターを持つ構造化データソース | SET CATALOG my_hms;SELECT * FROM db1.sales; |
| 明示的外部テーブル | OceanBase内で手動で定義 | ファイルパス、一時的な探索、単一テーブルのAPIマッピングなど、Catalog以外のシナリオ | CREATE EXTERNAL TABLE t1 (...) LOCATION = 'oss://...'; |
選定のポイント:
- Catalogは、データソースが既にHMSまたはMaxComputeに登録されているシナリオに適しています。OceanBaseはCatalogを通じてメタデータを読み取り、その後、基盤ストレージやリモートのテーブルにアクセスします。
- 明示的外部テーブルは、パスに従ってCSV / Parquet / ORCファイルにアクセスする場合、またはMaxCompute APIを介して単一のODPSテーブルをマッピングする場合などに適しています。
- Icebergテーブルは、External Catalog(HMS Catalog、REST Catalogなど)を通じてアクセスされ、
CREATE EXTERNAL TABLEによるアクセス方法には含まれません。詳細については、Catalogを通じたIcebergテーブルのロードを参照してください。
注意
- Catalogは基盤データのメタデータ抽象化であり、ストレージ位置自体ではありません。
- HMS CatalogはHive Metastoreへの接続のみをサポートしており、任意のHDFSパスを直接指定することはできません。HMSに登録されていないファイルにアクセスする必要がある場合は、
CREATE EXTERNAL TABLE ... LOCATION方式を使用してください。
Catalogタイプ
カタログはデータベースオブジェクトのトップレベル名前空間であり、異なるデータソースのメタデータを整理し、分離するために使用されます。OceanBaseは内部カタログと外部カタログをサポートしています:
カタログタイプ |
データソース |
対応テーブルタイプ |
典型的なシナリオ |
|---|---|---|---|
内部カタログ (internal) |
OceanBaseローカルストレージ | OceanBaseテーブル | テナント内のコア業務データ |
| ODPSカタログ | アリババクラウドMaxCompute | ODPSテーブル | オフラインデータウェアハウス分析 |
| HMSカタログ | Hive Metastore | Hiveテーブル、Icebergテーブル | Hadoopエコシステム統合 |
内部カタログ
各テナントには、CREATE DATABASE、CREATE TABLE などのDDLで作成されたオブジェクトを含む、internal という名前の内部カタログが1つだけ存在します。internalカタログは外部カタログから論理的に分離されており、internalカタログの作成、削除、名前変更はサポートされていません。
- デフォルトでは
USE database;で直接アクセスでき、明示的にカタログを指定する必要はありません。 - 完全なDDL/DMLをサポートしています。データはOceanBase分散ストレージエンジンに保存されます。
USE ap_db;
SELECT COUNT(*) FROM user_behavior;
-- internalカタログを明示的に指定する(オプション)
SELECT COUNT(*) FROM internal.ap_db.user_behavior;
注意
内部カタログの名前は internal で、通常は省略できます。
外部カタログ
外部カタログは CREATE EXTERNAL CATALOG で作成します。SQLリファレンスは現在 ODPS Catalog を公式構文としています。HMS Catalog (V4.4.1+) およびIceberg関連のREST / FILESYSTEM Catalogパラメータについては、以下の接続ドキュメントを参照してください。使用前に、現在のクラスタバージョンとSQLリファレンスが更新されていないか確認してください:
Catalogの作成とアクセス
External Catalogの作成
internal Catalogは手動で作成する必要はありません。外部カタログの作成構文については CREATE EXTERNAL CATALOG を参照してください。各種パラメータの説明については、上記の接続ドキュメントを参照してください。
Catalogの確認
SHOW CATALOGS;
Catalogの切り替えとCross-Catalogクエリ
テーブルを参照する際は、以下のルールに従います:
- セッションのコンテキストを切り替えていない場合は、3部構成の識別子を使用する必要があります:
catalog_name.database_name.table_name SET CATALOGとUSEを実行した後は、略称のテーブル名を使用できます。
方法1:3部構成の識別子(コンテキストの切り替え不要)
SELECT CURRENT_CATALOG();
SELECT DATABASE();
SELECT * FROM hive_catalog.hive_db.hive_table;
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 hive_catalog;
USE hive_db;
SELECT h.*, o.*
FROM hive_table h
JOIN internal.ap_db.ap_table o ON h.id = o.id;
また、SET CATALOG catalog_name; を個別に実行するか、クエリ内で明示的に指定することもできます:
SELECT * FROM odps_catalog.database_name.table_name;
説明
SET CATALOGとUSEを実行していない場合、直接SELECT * FROM hive_table;と書くと、現在の Catalog(例:internal)でそのテーブルを検索し、エラーが発生する可能性があります。- コンテキストの切り替えは、後続のステートメントにのみ影響し、接続やトランザクションの状態には影響しません。
構文の詳細については、SET CATALOGおよびCATALOGの確認を参照してください。
Catalogのサポート範囲
このセクションでは、各外部Catalogの機能範囲を概説します。作成、認証、Location設定などの詳細については、対応する接続ドキュメントを参照してください。
HMS Catalog
項目 |
説明 |
|---|---|
| アクセスモード | 読み取り専用。INSERT、UPDATE、DROP TABLE などのDML/DDLはサポートされません |
| Hiveテーブル | ORC、Parquet、TextFile、CSVをサポートします。複合型は現在Parquet形式のARRAY型のみサポートしています |
| Icebergテーブル | V1 / V2をサポートします(Parquetを推奨)。Schema Evolution、Partition Transformなどをサポートします |
| Hiveバージョン | Hive 1.2.x、2.3.x、3.1.x、4.xをサポートします。IcebergテーブルのメタデータはHMSに登録すればアクセス可能です |
ARRAY型の説明については、配列要素型の概要を参照してください。HMSとHDFSの認証メカニズムについては、Catalogを使用したHiveテーブルのロードを参照してください。
ODPS Catalog
項目 |
説明 |
|---|---|
| サポート操作 | SELECT、JOIN、GROUP BY などの分析クエリ |
| サポートされない操作 | INSERT、UPDATE、DROP TABLE などの書き込みまたはDDL |
| クエリ最適化 | パーティションプルーニングと列プルーニングの条件付きプッシュダウンをサポートします |
詳細なパラメータとAPIモードの説明については、ODPS Catalogを参照してください。
Catalog権限管理
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、catalog.db.table のクエリ |
グローバル権限の付与:
GRANT CREATE CATALOG ON *.* TO 'user1';
GRANT USE CATALOG ON *.* TO 'user1' WITH GRANT OPTION;
特定のCatalogに権限を付与する:
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権限を取得します。- Catalog 権限とデータアクセス権限は相互に独立しています。HMS を例にとると、Catalog レイヤーは Hive Metastore に接続してメタデータを取得し、Location レイヤーは HDFS などのストレージ上のデータファイルにアクセスします。両レイヤーの認証は別々に設定する必要があります。
権限検証例:
GRANT SELECT, USE CATALOG ON CATALOG ca1 TO zhangsan WITH GRANT OPTION;
SHOW GRANTS FOR zhangsan;
権限照会ビュー:
外部テーブル
外部テーブル(External Table)は、OceanBase側にテーブル定義とアクセスパスを保存し、データは依然として外部ストレージ(オブジェクトストレージ、HDFS、MaxCompute など)に配置されます。外部テーブルは通常読み取り専用であり、制約やインデックスはサポートされません。
Catalog モードと比較して、明示的外部テーブルは以下のシナリオに適しています:
- ファイルパスに基づいて CSV、Parquet、ORC などのデータにアクセスする場合で、データが HMS に登録されていない場合
- 一時的に外部ファイルを調査する場合で、事前に Catalog を構築する必要がない場合
- MaxCompute API を使用して単一の ODPS テーブル(プロジェクト全体ではない)をマッピングする場合
OceanBase でサポートされている外部テーブルのタイプは以下のとおりです:
タイプ |
説明 |
ドキュメント |
|---|---|---|
| ファイル外部テーブル | OSS、S3、HDFS などのパス下にある CSV、Parquet、ORC ファイルにアクセスする | ファイル外部テーブル |
| URL 外部テーブル | FILES() を使用して外部ファイルを直接読み取るため、事前に外部テーブルを作成する必要はありません |
URL 外部テーブル |
| ODPS 外部テーブル | MaxCompute API を使用して単一の ODPS テーブルをマッピングする | ODPS 外部テーブル |
Iceberg テーブルは CREATE EXTERNAL TABLE でアクセスするものではなく、External Catalog を使用する必要があります。詳細については、Catalog を使用した Iceberg テーブルのロードを参照してください。
関連ドキュメント
アクセスドキュメント
- Catalog を使用した Hive テーブルのロード
- Hive テーブル(HMS)
- Catalog を使用した Iceberg テーブルのロード
- ODPS Catalog
- ODPS 外部テーブル
- ファイル外部テーブル
- URL 外部テーブル
- データレイクの概要