メインコンテンツまでスキップ
バージョン: 4.x

MaxCompute カタログ

MaxComputeは、Alibaba Cloud上のエンタープライズレベルSaaS(Software as a Service)クラウドデータウェアハウスです。MaxComputeが提供するオープンストレージSDKを通じて、DorisはMaxComputeTable情報を取得し、クエリと書き込みを実行できます。

適用シナリオ

シナリオ説明
データ統合MaxComputeデータを読み取り、Doris内部Tableに書き込みます。
データ書き戻しINSERTコマンドを使用してMaxCompute Tableにデータを書き込みます。(バージョン4.1.0以降でサポート)

使用上の注意

  1. バージョン2.1.7以降、MaxCompute CatalogはOpen Storage SDKをベースに開発されています。このバージョン以前は、Tunnel APIをベースに開発されていました。

  2. Open Storage SDKを使用する際には一定の制限があります。このドキュメント使用制限セクションを参照してください。

  3. 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の場合

    DorisMaxCompute
    カタログN/A
    DatabaseProject
    TableTable
  • mc.enable.namespace.schemaがtrueの場合

    DorisMaxCompute
    カタログProject
    DatabaseSchema
    TableTable

カラム型マッピング

MaxCompute タイプDoris タイプComment
booleanboolean
tinytinyint
tinyinttinyint
smallintsmallint
intint
bigintbigint
floatfloat
doubledouble
decimal(P, S)decimal(P, S)1 <= P <= 38, 0 <= scale <= 18
char(N)char(N)
varchar(N)varchar(N)
stringstring
datedate
datetimedatetime(3)精度3への固定マッピング。SET [GLOBAL] time_zone = 'Asia/Shanghai'でタイムゾーンを指定できます。
timestamp_ntzdatetime(6)MaxComputeのtimestamp_ntz精度は9ですが、DorisのDATETIME最大精度は6のみのため、データ読み込み時に余分な部分は切り捨てられます。
timestampdatetime(6)2.1.9/3.0.5以降でサポート。MaxComputeのtimestamp精度は9ですが、DorisのDATETIME最大精度は6のみのため、データ読み込み時に余分な部分は切り捨てられます。
arrayarray
mapmap
structstruct
otherUNSUPPORTED

基本例

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以降に適用)

  1. データ転送サービス用の専用リソースグループを使用する場合

    このドキュメントの「専用データサービスリソースグループの使用」章の「2. 認証」セクションを参照して、対応する権限を有効にしてください。「クォータ管理」リストで、対応するQuotaNameを確認してコピーし、"mc.quota" = "QuotaName"を指定してください。この時点で、VPCまたはパブリックネットワークのどちらかを選択してMaxComputeにアクセスできますが、VPCは帯域幅が保証されている一方、パブリックネットワークの帯域幅リソースは限られています。

  2. 従量課金を使用する場合

    このドキュメントの「オープンストレージ(従量課金)の使用」セクションを参照して、オープンストレージ(Storage API)スイッチを有効にし、AKとSKに対応するユーザーに権限を付与してください。この場合、mc.quotaはデフォルト値のpay-as-you-goであり、この値を追加で指定する必要はありません。従量課金では、VPCを使用してのみMaxComputeにアクセスでき、パブリックネットワーク経由ではアクセスできません。前払いユーザーのみがパブリックネットワーク経由でMaxComputeにアクセスできます。

  3. 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.regionmc.public_accessに基づいてエンドポイントを生成します。

生成される形式は以下の通りです:

mc.public_accessmc.odps_endpointmc.tunnel_endpoint
falsehttp://service.{mc.region}.maxcompute.aliyun-inc.com/apihttp://dt.{mc.region}.maxcompute.aliyun-inc.com
truehttp://service.{mc.region}.maxcompute.aliyun.com/apihttp://dt.{mc.region}.maxcompute.aliyun.com

ユーザーはmc.odps_endpointmc.tunnel_endpointを個別に指定してサービスアドレスをカスタマイズすることもできます。これは一部のプライベートデプロイされたMaxCompute環境に適しています。

MaxCompute EndpointとTunnel Endpointの設定については、異なる地域とネットワーク接続方法のエンドポイントを参照してください。

リソース使用量制御

ユーザーは、2つのSession Variables parallel_pipeline_task_numnum_scanner_threadsを調整することでTableレベルのリクエスト並行性を調整し、データ転送サービスでのリソース消費を制御できます。対応する並行性はmax(parallel_pipeline_task_num * be num * num_scanner_threads)と等しくなります。

注意:

  1. この方法は単一のQuery内の単一Tableの並行リクエスト数のみを制御でき、複数のSQL文間のリソース使用量は制御できません。

  2. 並行性を下げることは、Queryの実行時間を増加させることを意味します。