MaxCompute カタログ
MaxComputeは、Alibaba Cloud上のエンタープライズレベルSaaS(Software as a Service)クラウドデータウェアハウスです。MaxComputeが提供するオープンストレージSDKを通じて、DorisはMaxComputeTable情報を取得し、クエリと書き込みを実行できます。
適用シナリオ
| シナリオ | 説明 |
|---|---|
| データ統合 | MaxComputeデータを読み取り、Doris内部Tableに書き込みます。 |
| データ書き戻し | INSERTコマンドを使用してMaxCompute Tableにデータを書き込みます。(バージョン4.1.0以降でサポート) |
使用上の注意
-
バージョン2.1.7以降、MaxCompute CatalogはOpen Storage SDKをベースに開発されています。このバージョン以前は、Tunnel APIをベースに開発されていました。
-
Open Storage SDKを使用する際には一定の制限があります。このドキュメントの
使用制限セクションを参照してください。 -
Dorisバージョン3.1.3以前では、MaxComputeのProjectはDorisのDatabaseに対応していました。バージョン3.1.3では、
mc.enable.namespace.schemaパラメータを通じてMaxComputeスキーマ階層を導入できます。
Catalogの設定
構文
CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
'type' = 'max_compute',
{McRequiredProperties},
{McOptionalProperties},
{CommonProperties}
);
-
{McRequiredProperties}Property Name デスクリプション Supported Doris Version mc.default.projectアクセスするMaxComputeプロジェクトの名前。MaxCompute Project Listでプロジェクトを作成・管理できます。 mc.access_keyAccessKey。Alibaba Cloud Consoleで作成・管理できます。 mc.secret_keySecretKey。Alibaba Cloud Consoleで作成・管理できます。 mc.regionMaxComputeが有効化されているリージョン。Endpointから対応するRegionを確認できます。 Before 2.1.7 (exclusive) mc.endpointMaxComputeが有効化されているリージョン。設定については下記の「EndpointとQuotaの取得方法」セクションを参照してください。 2.1.7 (inclusive) and later -
{McOptionalProperties}Property Name デフォルト値 デスクリプション Supported Doris Version mc.tunnel_endpointNone 付録の「カスタムサービスアドレス」を参照してください。 Before 2.1.7 (exclusive) mc.odps_endpointNone 付録の「カスタムサービスアドレス」を参照してください。 Before 2.1.7 (exclusive) mc.quotapay-as-you-goQuota名。設定については下記の「EndpointとQuotaの取得方法」セクションを参照してください。 2.1.7 (inclusive) and later mc.split_strategybyte_sizesplitのパーティショニング方法を設定します。バイトサイズによるパーティション byte_sizeまたは行数によるrow_countに設定できます。2.1.7 (inclusive) and later mc.split_byte_size268435456各splitが読み込むファイルサイズ(バイト単位)。デフォルトは256MB。 "mc.split_strategy" = "byte_size"の場合のみ有効。2.1.7 (inclusive) and later mc.split_row_count1048576各splitが読み込む行数。 "mc.split_strategy" = "row_count"の場合のみ有効。2.1.7 (inclusive) and later mc.split_cross_partitionfalse生成されたsplitがパーティションをまたぐかどうか。 2.1.8 (inclusive) and later mc.connect_timeout10sMaxComputeの接続タイムアウト。 2.1.8 (inclusive) and later mc.read_timeout120sMaxComputeの読み込みタイムアウト。 2.1.8 (inclusive) and later mc.retry_count4タイムアウト後のリトライ回数。 2.1.8 (inclusive) and later mc.datetime_predicate_push_downtruetimestamp/timestamp_ntzタイプに対してpredicate push-downを許可するかどうか。Dorisはこれら2つのタイプを同期する際に精度を失います(9 -> 6)。そのため、元データの精度が6桁より高い場合、predicate push-downが不正確な結果につながる可能性があります。2.1.9/3.0.5 (inclusive) and later mc.account_formatnameAlibaba Cloud国際サイトと中国サイトのアカウントシステムは一致していません。国際サイトのユーザーで user 'RAM$xxxxxx:xxxxx' is not a valid aliyun accountのようなエラーが発生する場合、このパラメータをidに設定できます。3.0.9/3.1.1 (inclusive) and later mc.enable.namespace.schemafalseMaxComputeスキーマ階層をサポートするかどうか。参照:https://help.aliyun.com/zh/maxcompute/user-guide/schema-related-運用 3.1.3 (inclusive) and later -
{CommonProperties}CommonPropertiesセクションは共通プロパティの記入に使用されます。カタログ 概要の「Common Properties」セクションを参照してください。
サポート対象MaxComputeバージョン
MaxComputeのパブリッククラウドバージョンのみがサポートされています。プライベートクラウドバージョンのサポートについては、Dorisコミュニティサポートにお問い合わせください。
サポート対象MaxComputeTable
-
パーティションTable、クラスタードTable、マテリアライズドビューの読み込みをサポートしています。
-
MaxCompute外部Table、論理ビュー、Delta Tablesの読み込みはサポートしていません。
階層マッピング
-
mc.enable.namespace.schemaがfalseの場合Doris MaxCompute カタログ N/A Database Project Table Table -
mc.enable.namespace.schemaがtrueの場合Doris MaxCompute カタログ Project Database Schema Table Table
カラム型マッピング
| MaxCompute タイプ | Doris タイプ | Comment |
|---|---|---|
| boolean | boolean | |
| tiny | tinyint | |
| tinyint | tinyint | |
| smallint | smallint | |
| int | int | |
| bigint | bigint | |
| float | float | |
| double | double | |
| decimal(P, S) | decimal(P, S) | 1 <= P <= 38, 0 <= scale <= 18 |
| char(N) | char(N) | |
| varchar(N) | varchar(N) | |
| string | string | |
| date | date | |
| datetime | datetime(3) | 精度3への固定マッピング。SET [GLOBAL] time_zone = 'Asia/Shanghai'でタイムゾーンを指定できます。 |
| timestamp_ntz | datetime(6) | MaxComputeのtimestamp_ntz精度は9ですが、DorisのDATETIME最大精度は6のみのため、データ読み込み時に余分な部分は切り捨てられます。 |
| timestamp | datetime(6) | 2.1.9/3.0.5以降でサポート。MaxComputeのtimestamp精度は9ですが、DorisのDATETIME最大精度は6のみのため、データ読み込み時に余分な部分は切り捨てられます。 |
| array | array | |
| map | map | |
| struct | struct | |
| other | UNSUPPORTED |
基本例
CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.default.project' = 'project',
'mc.access_key' = 'sk',
'mc.secret_key' = 'ak',
'mc.endpoint' = 'http://service.cn-beijing-vpc.MaxCompute.aliyun-inc.com/api'
);
2.1.7より前のバージョン(2.1.7は含まない)を使用している場合は、以下のステートメントを使用してください。(2.1.8以降へのアップグレードを推奨します)
CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.region' = 'cn-beijing',
'mc.default.project' = 'project',
'mc.access_key' = 'ak',
'mc.secret_key' = 'sk',
'mc.odps_endpoint' = 'http://service.cn-beijing.maxcompute.aliyun-inc.com/api',
'mc.tunnel_endpoint' = 'http://dt.cn-beijing.maxcompute.aliyun-inc.com'
);
Schema サポートあり:
CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.region' = 'cn-beijing',
'mc.default.project' = 'project',
'mc.access_key' = 'ak',
'mc.secret_key' = 'sk',
'mc.odps_endpoint' = 'http://service.cn-beijing.maxcompute.aliyun-inc.com/api',
'mc.tunnel_endpoint' = 'http://dt.cn-beijing.maxcompute.aliyun-inc.com',
'mc.enable.namespace.schema' = 'true'
);
Query操作
基本Query
-- 1. switch to catalog, use database and query
SWITCH mc_ctl;
USE mc_ctl;
SELECT * FROM mc_tbl LIMIT 10;
-- 2. use mc database directly
USE mc_ctl.mc_db;
SELECT * FROM mc_tbl LIMIT 10;
-- 3. use full qualified name to query
SELECT * FROM mc_ctl.mc_db.mc_tbl LIMIT 10;
Write 運用
バージョン4.1.0以降、DorisはMaxComputeTableへの書き込み操作をサポートしています。標準的なINSERT文を使用して、他のデータソースからDorisを通じてMaxComputeTableに直接データを書き込むことができます。
- これは実験的機能であり、バージョン4.1.0以降でサポートされています。
- パーティション化されたTableと非パーティション化されたTableの両方への書き込みをサポートします。
- クラスター化されたTable、トランザクショナルTable、Delta Tables、外部Tableへの書き込みはサポートしていません。
INSERT INTO
INSERT操作は対象Tableにデータを追加します。
Example:
INSERT INTO mc_tbl values (val1, val2, val3, val4);
INSERT INTO mc_tbl SELECT col1, col2 FROM internal.db1.tbl1;
INSERT INTO mc_tbl(col1, col2) values (val1, val2);
INSERT INTO mc_tbl(col1, col2, partition_col1, partition_col2) values (1, 2, "beijing", "2023-12-12");
-- Write to specified partition (you can specify only some partition columns, with remaining partitions written dynamically)
INSERT INTO mc_tbl PARTITION(ds='20250201') SELECT id, name FROM source_tbl;
INSERT INTO mc_tbl PARTITION(ds='20250101', region='bj') VALUES (1, 'v1'), (2, 'v2');
INSERT OVERWRITE
INSERT OVERWRITEは、Table内の既存データを新しいデータで完全に上書きします。
INSERT OVERWRITE TABLE mc_tbl VALUES(val1, val2, val3, val4);
INSERT OVERWRITE TABLE mc_tbl(col1, col2) SELECT col1, col2 FROM internal.db1.tbl1;
-- Write to specified partition
INSERT OVERWRITE TABLE mc_tbl PARTITION(ds='20250101') VALUES (10, 'new1');
CTAS
CTAS文を使用してMaxComputeTableを作成し、データを書き込むことができます:
CREATE TABLE mc_tbl AS SELECT * FROM other_table;
データベースとTable管理
バージョン4.1.0以降、DorisはMaxComputeデータベースとTableの作成と削除をサポートします。
- これは実験的な機能で、バージョン4.1.0以降でサポートされています。
- パーティション化Tableと非パーティション化Tableの作成と削除をサポートします。
- クラスター化Table、トランザクションTable、Delta Tables、外部Tableの作成はサポートしていません。
この機能は
mc.enable.namespace.schemaプロパティがtrueに設定されている場合のみ利用可能です。
データベースの作成と削除
SWITCH文を使用して対応するCatalogに切り替え、CREATE DATABASE文を実行できます:
SWITCH mc;
CREATE DATABASE [IF NOT EXISTS] mc_schema;
完全修飾名を使用して作成することもできます:
CREATE DATABASE [IF NOT EXISTS] mc.mc_schema;
データベースの削除:
DROP DATABASE [IF EXISTS] mc.mc_schema;
MaxCompute Databaseの場合、削除後、その下にあるすべてのTableも削除されます。
Tableの作成と削除
-
作成
DorisはMaxComputeでパーティション化されたTableまたはパーティション化されていないTableの作成をサポートしています。
例:
CREATE TABLE mc_schema.mc_tbl1 (
bool_col BOOLEAN,
int_col INT,
bigint_col BIGINT,
float_col FLOAT,
double_col DOUBLE,
decimal_col DECIMAL(18,6),
string_col STRING,
varchar_col VARCHAR(200),
char_col CHAR(50),
date_col DATE,
datetime_col DATETIME,
arr_col ARRAY<STRING>,
map_col MAP<STRING, STRING>,
struct_col STRUCT<f1:STRING, f2:INT>
);
CREATE TABLE mc_schema.mc_tbl2 (
id INT,
val STRING,
ds STRING,
region STRING
)
PARTITION BY (ds, region)(); -
Drop
DROP TABLE文を使用してMaxComputeTableを削除できます。現在、Tableを削除するとパーティションデータを含むデータも削除されます。例:
DROP TABLE [IF EXISTS] mc_tbl;
付録
エンドポイントとクォータの取得方法(Doris 2.1.7以降に適用)
-
データ転送サービス用の専用リソースグループを使用する場合
このドキュメントの「専用データサービスリソースグループの使用」章の「2. 認証」セクションを参照して、対応する権限を有効にしてください。「クォータ管理」リストで、対応する
QuotaNameを確認してコピーし、"mc.quota" = "QuotaName"を指定してください。この時点で、VPCまたはパブリックネットワークのどちらかを選択してMaxComputeにアクセスできますが、VPCは帯域幅が保証されている一方、パブリックネットワークの帯域幅リソースは限られています。 -
従量課金を使用する場合
このドキュメントの「オープンストレージ(従量課金)の使用」セクションを参照して、オープンストレージ(Storage API)スイッチを有効にし、AKとSKに対応するユーザーに権限を付与してください。この場合、
mc.quotaはデフォルト値のpay-as-you-goであり、この値を追加で指定する必要はありません。従量課金では、VPCを使用してのみMaxComputeにアクセスでき、パブリックネットワーク経由ではアクセスできません。前払いユーザーのみがパブリックネットワーク経由でMaxComputeにアクセスできます。 -
Alibaba Cloudエンドポイントドキュメントの「地域エンドポイント参照表」に従って
mc.endpointを設定するVPC経由でアクセスするユーザーは、「地域エンドポイント参照表(Alibaba Cloud VPCネットワーク接続方法)」表の「VPCネットワークエンドポイント」列に従って
mc.endpointを設定する必要があります。パブリックネットワーク経由でアクセスするユーザーは、「地域エンドポイント参照表(Alibaba Cloudクラシックネットワーク接続方法)」表の「クラシックネットワークエンドポイント」列、または「地域エンドポイント参照表(外部ネットワーク接続方法)」表の「外部ネットワークエンドポイント」列から選択してmc.endpointを設定できます。
カスタムサービスアドレス(Doris 2.1.7以前のバージョンに適用)
Doris 2.1.7以前のバージョンでは、Tunnel SDKを使用してMaxComputeとやり取りするため、以下の2つのエンドポイントプロパティが必要です:
-
mc.odps_endpoint:MaxCompute Endpoint、MaxComputeメタデータ(データベースとTable情報)の取得に使用されます。 -
mc.tunnel_endpoint:Tunnel Endpoint、MaxComputeデータの読み取りに使用されます。
デフォルトでは、MaxCompute Catalogはmc.regionとmc.public_accessに基づいてエンドポイントを生成します。
生成される形式は以下の通りです:
mc.public_access | mc.odps_endpoint | mc.tunnel_endpoint |
|---|---|---|
| false | http://service.{mc.region}.maxcompute.aliyun-inc.com/api | http://dt.{mc.region}.maxcompute.aliyun-inc.com |
| true | http://service.{mc.region}.maxcompute.aliyun.com/api | http://dt.{mc.region}.maxcompute.aliyun.com |
ユーザーはmc.odps_endpointとmc.tunnel_endpointを個別に指定してサービスアドレスをカスタマイズすることもできます。これは一部のプライベートデプロイされたMaxCompute環境に適しています。
MaxCompute EndpointとTunnel Endpointの設定については、異なる地域とネットワーク接続方法のエンドポイントを参照してください。
リソース使用量制御
ユーザーは、2つのSession Variables parallel_pipeline_task_numとnum_scanner_threadsを調整することでTableレベルのリクエスト並行性を調整し、データ転送サービスでのリソース消費を制御できます。対応する並行性はmax(parallel_pipeline_task_num * be num * num_scanner_threads)と等しくなります。
注意:
-
この方法は単一のQuery内の単一Tableの並行リクエスト数のみを制御でき、複数のSQL文間のリソース使用量は制御できません。
-
並行性を下げることは、Queryの実行時間を増加させることを意味します。