OceanBaseはV4.3.5 BP2以降でCatalog(データカタログ)機能をサポートしており、従来のDatabase → Tableという2層構造に加えてCatalog層が新たに追加され、Catalog → Database → Tableという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(メインアカウントのではありません) |
| STATUS_TOKEN | 条件付き | 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とデータベースを同時に切り替える
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;