OceanBaseはV4.3.5 BP2からCatalog(データカタログ)機能をサポートしており、従来のデータベース→テーブルの2層モデルにCatalog層を追加し、Catalog→データベース→テーブルの3層アーキテクチャを形成しています。
ODPS Catalogを利用することで、ユーザーはAlibaba Cloud MaxCompute(旧ODPS)内のテーブルデータを直接クエリでき、外部テーブルマッピングを手動で作成する必要がありません。これは、オフラインデータウェアハウスのクエリ高速化シナリオに適しています。
- ETLクエリ不要:MaxComputeテーブルに直接アクセスでき、外部テーブル作成の煩雑な操作が不要です。
- メタデータの統一:ODPSプロジェクト内のデータベースとテーブル構造を自動同期します。
- クロスソースJOIN:OceanBaseの内部テーブルとの連携クエリをサポートします。
サポート機能
- 読み取り専用クエリ:
SELECT、JOIN、GROUP BYなどの分析操作をサポートします。 - 書き込みはサポートされていません:
INSERT、UPDATE、DROP TABLEなどのDML/DDLは禁止されています。 - パーティションプルーニング/カラムプルーニング:フィルター条件を自動的にドロップダウンし、データ転送量を削減します。
制限事項
制限事項 |
説明 |
|---|---|
| 複雑なデータ型 | ARRAY<MAP<STRING, BIGINT>> などのネストされた複雑な型はサポートされていません |
| パフォーマンスの依存性 | クエリの速度はMaxCompute Tunnelのクォータとネットワーク帯域幅の影響を受けます |
| 環境の依存性 | Java SDKをデプロイする必要があります(MaxCompute SDKはJavaベース)。 |
環境依存関係の詳細については、OceanBase JAVA SDK環境のデプロイを参照してください。
前提条件
権限要件
- 現在のユーザーは
CREATE CATALOG権限(MySQLモード)またはCREATE CATALOGシステム権限(Oracleモード)を持っている必要があります。 - クエリ時には
USE CATALOG権限が必要です(特定のCatalogまたはグローバルに付与可能)。
- 現在のユーザーは
アクセス資格
- MaxComputeのAccessKey ID / Secret(またはSTS Token)を取得済みであること。
- OceanBaseクラスタがMaxCompute EndpointおよびTunnel Endpointにアクセスできること。
認可設定
- MaxComputeプロジェクトがOceanBaseが使用するRAMユーザーに対して認可を行っていること(少なくとも
Read権限)。詳細については、MaxComputeオープンストレージの概要を参照してください。
- MaxComputeプロジェクトがOceanBaseが使用するRAMユーザーに対して認可を行っていること(少なくとも
ODPS Catalog作成構文
CREATE EXTERNAL CATALOG [IF NOT EXISTS] catalog_name
PROPERTIES (
TYPE = 'ODPS',
[ACCESSTYPE = 'aliyun' | 'sts' | 'app'],
ACCESSID = 'your-access-id',
ACCESSKEY = 'your-access-key',
[STSTOKEN = 'your-sts-token'], -- ACCESSTYPE='sts' の場合のみ必要
ENDPOINT = 'http://service.cn-hangzhou.maxcompute.aliyun.com/api',
TUNNEL_ENDPOINT = 'http://dt.cn-hangzhou.maxcompute.aliyun.com',
PROJECT_NAME = 'your_odps_project',
[QUOTA_NAME = 'your_quota'],
[COMPRESSION = 'zlib' | 'zstd' | 'lz4' | 'odps_lz4'],
API_MODE = {"tunnel_api" | "storage_api"},
SPLIT = {"byte" | "row"}
REGION = 'region_name'
);
パラメータ説明
パラメータ |
必須 |
説明 |
|---|---|---|
| TYPE | はい | ODPSに固定されます |
| ACCESSTYPE | いいえ | アカウントタイプ。デフォルトはaliyun。aliyun / sts / appをサポートします |
| ACCESSID / ACCESSKEY | はい | RAMユーザーのAccessKey(リーダーアカウントAKではありません) |
| STSTOKEN | 条件 | ACCESSTYPE = 'sts' の場合のみ必須 |
| ENDPOINT | はい | MaxComputeサービスのエントリポイント(リージョンを含む) |
| TUNNEL_ENDPOINT | はい | Tunnelサービスのアドレス。効率的なデータ取得に使用されます |
| PROJECT_NAME | はい | MaxComputeプロジェクト名(Databaseに相当) |
| QUOTA_NAME | いいえ | 計算リソースクォータを指定する場合に使用します(該当する場合のみ) |
| COMPRESSION | いいえ | データ圧縮形式(ODPSテーブルと一致させる必要があります)。設定しない場合、圧縮は有効になりません |
| API_MODE | はい | API_MODE:ODPSを呼び出すAPIモードを指定します。値の詳細については、以下のAPI_MODEの説明を参照してください。 |
| SPLIT | はい | storage_apiを使用する場合、タスクをbyteまたはrow単位で分割し、各スレッドに割り当てるかどうかを指定します。テーブル内の各行のデータバイト数に大きな差異がある場合は、SPLITの値をbyteに設定し、それ以外の場合はrowに設定します。 |
| REGION | はい | MaxComputeで有効なリージョン |
API_MODE
OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP3バージョンからAPI_MODEとSPLITパラメータをサポートしています:
tunnel_api(デフォルト値):
特別なネットワーク設定は不要です:すべてのデプロイメントシナリオに適用され、OceanBaseデータベースとMaxComputeが同一のVPC(仮想プライベートクラウド)内にある必要はありません。
MaxComputeの追加権限は不要です:認証にはAccessIDとAccessKeyのみを提供する必要があり、MaxCompute Storage API権限を有効にする必要はありません。
適用環境:
- OceanBaseデータベースとMaxComputeが同一のVPCにデプロイされていない場合。
- MaxCompute Storage APIが有効になっていない場合。
- データ転送で遅延に対する要求が低い場合。
storage_api:
ネットワーク依存性:低遅延、高スループットのデータ転送を実現するためには、OceanBaseデータベースとMaxComputeが同一のVPC内にデプロイされている必要があります。
権限依存性:MaxComputeでStorage API権限を有効にし、アクセスキー(AccessKey)が該当する権限を持っていることを確認する必要があります。
クォータ要件:storage_apiモードを使用する場合、QUOTAパラメータをpay-as-you-go(従量課金クォータ)に設定する必要があります。これにより、Storage API呼び出しが正常に課金および実行されることが保証されます。詳細については、MaxCompute Storage開放ストレージの概要を参照してください。
適用環境:
- OceanBaseデータベースとMaxComputeが同一のVPCネットワークに属している場合。
- MaxCompute Storage APIが有効になっている場合。
- データ量が非常に多い、またはリアルタイム性に対する要求が高い場合。
作成例
CREATE EXTERNAL CATALOG odps_prod
PROPERTIES (
TYPE = 'ODPS',
ACCESSID = 'LTAI5tXXXXXX',
ACCESSKEY = 'xxxxxxxxxxxxxx',
ENDPOINT = 'http://service.cn-hangzhou.maxcompute.aliyun.com/api',
TUNNEL_ENDPOINT = 'http://dt.cn-hangzhou.maxcompute.aliyun.com',
PROJECT_NAME = 'sales_analytics',
REGION = 'cn-hangzhou'
);
セキュリティ推奨事項:
- RAMサブアカウントを使用し、最小権限の原則に従う
- SQLに平文のAKをハードコーディングすることを避け、変数や秘密鍵管理サービスを通じて注入する
使用方法
Catalogの切り替え
-- 方法1:Catalogのみを切り替える
SET CATALOG odps_prod;
-- 方法2:CatalogとDatabaseを同時に切り替える
USE odps_prod.sales_db;
ODPSテーブルのクエリ
-- Catalogが既にodps_prodに切り替わっている場合、直接クエリする
SELECT * FROM user_log
WHERE dt = '20250401'
LIMIT 10;
-- フェデレーションクエリ(内部テーブルとJOIN)
SELECT o.order_id, u.city
FROM internal.test_db.orders o
JOIN users u ON o.user_id = u.id;
メタデータ操作
-- テーブル構造の確認
DESC odps_prod.sales_db.user_log;
-- テーブル作成ステートメントの確認
SHOW CREATE TABLE odps_prod.sales_db.user_log;
-- 現在のテナントのすべてのCatalogを一覧表示
SHOW CATALOGS;
-- Catalog作成ステートメントの確認
SHOW CREATE CATALOG odps_prod;
Catalogの削除
DROP CATALOG IF EXISTS odps_prod;