すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:MaxCompute connector

最終更新日:Jun 05, 2026

MaxCompute コネクタを使用すると、Alibaba Cloud のエクサバイト規模のフルマネージドデータウェアハウスプラットフォームである MaxCompute (旧 ODPS) との間で、Flink SQL および DataStream ジョブから直接データの読み書きができます。

機能

項目 説明
テーブルタイプ ソーステーブル、ディメンションテーブル、結果テーブル、データインジェストシンク
実行モード ストリーミングモードとバッチモード
API タイプ DataStream API、SQL API、およびデータインジェスト YAML ジョブ
セマンティクス at-least-once
結果テーブルでのデータの更新または削除 Batch Tunnel または Streaming Tunnel: 挿入のみ。Upsert Tunnel: 挿入、更新、削除。

メトリクス

テーブルタイプ メトリクス
ソース numRecordsInnumRecordsInPerSecondnumBytesInnumBytesInPerSecond
シンク numRecordsOutnumRecordsOutPerSecondnumBytesOutnumBytesOutPerSecond
ディメンションテーブル dim.odps.cacheSize
詳細については、「メトリックの監視」をご参照ください。

前提条件

開始する前に、以下を確認してください。

  • MaxCompute テーブルがあること。詳細については、「テーブルの作成」をご参照ください。

制限事項

  • コネクタは at-least-once セマンティクスのみをサポートします。使用するトンネルによっては、MaxCompute に重複したレコードが出現する可能性があります。トンネルの選択に関するガイダンスについては、「アップストリームおよびダウンストリームストレージに関するよくある質問」の「データトンネルの選択方法」セクションをご参照ください。

  • デフォルトでは、ソースはフルモードで動作します。つまり、partition オプションで指定されたパーティションからのみデータを読み取ります。すべてのデータが読み取られると、ジョブは終了し、新しいパーティションは監視されません。新しいパーティションを継続的に監視するには、startPartition を使用して増分ソースを設定する必要があります。

  • ディメンションテーブルのキャッシュがリフレッシュされるたびに、テーブルは最新のパーティションをチェックします。ソースが開始された後、すでに読み取り中のパーティションに新しく追加されたデータは読み取りません。パーティションに完全なデータが含まれた後にのみデプロイメントを実行してください。

トンネルの選択

MaxCompute は、Flink からデータを書き込むための 3 つのトンネルを提供します。ユースケースに基づいて選択してください。

トンネル デフォルト 使用するケース
MaxCompute Batch Tunnel はい (useStreamTunnel=false, enableUpsert=false) バッチロード。データはチェックポイント後にのみ利用可能になります。スケジュールされたフラッシュを無効にするには、flushIntervalMs=0 を設定します。
MaxCompute Streaming Tunnel いいえ (useStreamTunnel=true) ほぼリアルタイムのインジェスト。フラッシュされたデータは MaxCompute ですぐに利用可能になります。
MaxCompute Upsert Tunnel いいえ (enableUpsert=true) MaxCompute Delta テーブルに対する INSERT、UPDATE、DELETE 操作。VVR 8.0.6 以降が必要です。

詳細な比較については、「アップストリームおよびダウンストリームストレージに関するよくある質問」の「データトンネルの選択方法」セクションをご参照ください。

SQL

MaxCompute コネクタは、SQL ベースのジョブでソース、ディメンション、または結果テーブルとして使用できます。

構文

CREATE TEMPORARY TABLE odps_source(
  id INT,
  user_name VARCHAR,
  content VARCHAR
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpoint>',
  'project' = '<yourProjectName>',
  'schemaName' = '<yourSchemaName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'partition' = 'ds=2018****'
);

コネクタオプション

一般オプション

オプション 必須 デフォルト 説明
connector はい STRING odps に設定します。
endpoint はい STRING MaxCompute エンドポイント。詳細については、「エンドポイント」をご参照ください。
tunnelEndpoint いいえ STRING MaxCompute Tunnel エンドポイント。指定しない場合、MaxCompute は Server Load Balancer (SLB) を介してトンネル接続を割り当てます。
project はい STRING MaxCompute プロジェクト名。
schemaName いいえ STRING MaxCompute のスキーマ機能が有効になっている場合にのみ必要です。これをテーブルのスキーマ名に設定します。詳細については、「スキーマ操作」をご参照ください。VVR 8.0.6 以降。
tableName はい STRING MaxCompute テーブル名。
accessId はい STRING MaxCompute へのアクセスに使用する AccessKey ID。詳細については、「AccessKey ID と AccessKey Secret の表示方法
重要

AccessKey ID は変数として保存してください。詳細については、「変数の管理」をご参照ください。

accessKey はい STRING MaxCompute へのアクセスに使用する AccessKey Secret。
partition いいえ STRING MaxCompute テーブルのパーティション名。非パーティション化テーブルまたは増分ソースには不要です。詳細については、「アップストリームおよびダウンストリームストレージに関するよくある質問」の「partition オプションの設定方法」セクションをご参照ください。
compressAlgorithm いいえ SNAPPY STRING MaxCompute Tunnel の圧縮アルゴリズム。有効な値: RAW (圧縮なし)、ZLIBSNAPPY。テストシナリオでは、SNAPPY は ZLIB と比較してスループットが約 50% 向上します。
quotaName いいえ STRING 専用の MaxCompute Tunnel リソースグループのクォータ名。VVR 8.0.3 以降。指定した場合、tunnelEndpoint を削除してください。そうしないと、tunnelEndpoint で指定されたトンネルが優先されます。

ソースオプション

オプション 必須 デフォルト 説明
maxPartitionCount いいえ 100 INTEGER 読み取るパーティションの最大数。超えた場合、エラー "The number of matched partitions exceeds the default limit" が表示されます。あまりにも多くのパーティションから読み取ると、MaxCompute に過負荷がかかり、ジョブの起動が遅くなる可能性があります。この値は、ワークロードで必要な場合にのみ増やしてください。
useArrow いいえ false BOOLEAN Arrow フォーマットを使用してデータを読み取ります。これは MaxCompute ストレージ API を呼び出します。バッチデプロイメントのみ。VVR 8.0.8 以降。
splitSize いいえ 256 MB MEMORYSIZE Arrow フォーマットを使用する際のスプリットごとにプルされるデータ量。バッチデプロイメントのみ。VVR 8.0.8 以降。
compressCodec いいえ "" (なし) STRING Arrow フォーマットで読み取る際の圧縮アルゴリズム。有効な値: "" (なし)、ZSTDLZ4_FRAME。コーデックを指定すると、圧縮なしの場合よりもスループットが向上します。バッチデプロイメントのみ。VVR 8.0.8 以降。
dynamicLoadBalance いいえ false BOOLEAN 動的シャード割り当てを有効にして、処理性能を向上させ、全体の読み取り時間を短縮します。ただし、異なる演算子が不整合な量のデータを読み取るため、データスキューが発生する可能性があることに注意してください。バッチデプロイメントのみ。VVR 8.0.8 以降。

増分ソースオプション

増分ソースは、MaxCompute を断続的にポーリングして新しいパーティションを検出します。新しいパーティションを読み取る前に、そのパーティションへのすべてのデータ書き込みが完了している必要があります。詳細については、「アップストリームおよびダウンストリームストレージに関するよくある質問」の「増分ソースがデータ書き込み中に新しいパーティションを検出した場合の対処法」セクションをご参照ください。

パーティションの順序付け: ソースは、アルファベット順で startPartition の値以上であるパーティションを読み取ります。たとえば、year=2023,month=10 はアルファベット順で year=2023,month=9 の前にソートされるため、月の値をゼロパディングして (year=2023,month=9 の代わりに year=2023,month=09 を使用)、正しい順序を確保してください。

オプション 必須 デフォルト 説明
startPartition はい STRING 増分読み取りの開始パーティション。指定した場合、partition は無視されます。多段パーティション化テーブルの場合、パーティション列の値をレベルの降順で設定します。詳細については、「アップストリームおよびダウンストリームストレージに関するよくある質問」の「startPartition の設定方法」セクションをご参照ください。
subscribeIntervalInSec いいえ 30 INTEGER ポーリング間隔 (秒)。
modifiedTableOperation いいえ NONE Enum 読み取り中にパーティションが変更された場合のアクション。ダウンロードセッションはチェックポイントに保存されます。セッション開始後にパーティション内のデータが変更されると、チェックポイントからの再開に失敗し、デプロイメントが繰り返し再起動します。有効な値: NONEstartPartition を更新して利用できないパーティションをスキップし、状態なしで再起動します。SKIP — 再開時に利用できないパーティションを自動的にスキップします。VVR 8.0.3 以降。いずれかの値に設定した場合、変更されたパーティションからすでに読み取られたデータは保持され、未読のデータは破棄されます。

シンク オプション

オプション 必須 デフォルト 説明
useStreamTunnel いいえ false BOOLEAN Batch Tunnel の代わりに MaxCompute Streaming Tunnel を使用します。true: Streaming Tunnel、false: Batch Tunnel。詳細については、「トンネルの選択」をご参照ください。
flushIntervalMs いいえ 30000 (30 秒) LONG トンネルライターバッファーのフラッシュ間隔 (ミリ秒)。Streaming Tunnel の場合: フラッシュされたデータはすぐに利用可能になります。Batch Tunnel の場合: データはチェックポイント後にのみ利用可能になります。スケジュールされたフラッシュを無効にするには 0 に設定します。flushIntervalMs または batchSize のいずれかに達したときにトリガーされます。
batchSize いいえ 67108864 (64 MB) LONG バッファーサイズ (バイト)。バッファーがこのサイズに達するとデータがフラッシュされます。batchSize または flushIntervalMs のいずれかに達したときにトリガーされます。
numFlushThreads いいえ 1 INTEGER トンネルライターバッファーをフラッシュするために使用されるスレッド数。1 より大きい値にすると、パーティション間で同時フラッシュが可能になります。
slotNum いいえ 0 INTEGER Flink からデータを受信するための Tunnel スロットの数。スロットの制限については、「データ転送サービスの概要」をご参照ください。
dynamicPartitionLimit いいえ 100 INTEGER 2 つのチェックポイント間に書き込まれる動的パーティションの最大数。超えた場合、エラー "Too many dynamic partitions" が表示されます。多くのパーティションに書き込むと、MaxCompute への負荷が増加し、チェックポイントが遅くなります。この値は、ワークロードで必要な場合にのみ増やしてください。
retryTimes いいえ 3 INTEGER MaxCompute サーバーリクエスト (セッション作成、送信、またはフラッシュの失敗) の最大リトライ回数。
sleepMillis いいえ 1000 INTEGER リトライ間隔 (ミリ秒)。
enableUpsert いいえ false BOOLEAN MaxCompute Upsert Tunnel を使用します。true: INSERT、UPDATE_AFTER、DELETE レコードを処理します。falseuseStreamTunnel で指定されたトンネルを使用します。VVR 8.0.6 以降。アップサートモードでセッションコミット中にシンクでエラーまたは長時間の障害が発生した場合は、シンク演算子の並列度を 10 以下に設定してください。
upsertAsyncCommit いいえ false BOOLEAN アップサートセッションをコミットする際に非同期モードを使用します。非同期モードはコミット時間を短縮しますが、コミットされたデータはすぐにクエリできません。VVR 8.0.6 以降。
upsertCommitTimeoutMs いいえ 120000 (120 秒) INTEGER アップサートセッションコミットのタイムアウト (ミリ秒)。VVR 8.0.6 以降。
sink.operation いいえ insert STRING Delta テーブルの書き込みモード。insert: 追加モード、upsert: 更新モード。VVR 8.0.10 以降。
sink.parallelism いいえ INTEGER Delta テーブルの書き込み並列度。デフォルトはアップストリームの並列度です。最適な書き込み性能とメモリ効率のためには、write.bucket.num の値が sink.parallelism の整数倍である必要があります。VVR 8.0.10 以降。
sink.file-cached.enable いいえ false BOOLEAN Delta テーブルの動的パーティションへの書き込み時にファイルキャッシュモードを有効にします。サーバーに書き込まれる小さなファイルを減らしますが、書き込みレイテンシが増加します。シンクの並列度が高い場合に有効にしてください。VVR 8.0.10 以降。
sink.file-cached.writer.num いいえ 16 INTEGER ファイルキャッシュモードでのタスクごとの同時アップロードスレッド数。この値を高く設定しすぎないでください。多くのパーティションに同時に書き込むと、メモリ不足 (OOM) エラーが発生する可能性があります。sink.file-cached.enable=trueVVR 8.0.10以降。
sink.bucket.check-interval いいえ 60000 INTEGER ファイルキャッシュモードでのファイルサイズチェック間隔 (ミリ秒)。sink.file-cached.enable=trueVVR 8.0.10 以降。
sink.file-cached.rolling.max-size いいえ 16 MB MEMORYSIZE 単一のキャッシュファイルの最大サイズ。超えた場合、データはサーバーにアップロードされます。sink.file-cached.enable=trueVVR 8.0.10 以降。
sink.file-cached.memory いいえ 64 MB MEMORYSIZE ファイルキャッシュモードでのファイル書き込み用の最大オフヒープメモリ。sink.file-cached.enable=trueVVR 8.0.10+。
sink.file-cached.memory.segment-size いいえ 128 KB MEMORYSIZE ファイルキャッシュモードでのファイル書き込み用のバッファーセグメントサイズ。sink.file-cached.enable=trueVVR 8.0.10 以降。
sink.file-cached.flush.always いいえ true BOOLEAN ファイルキャッシュモードでファイルを書き込む際にキャッシュを使用するかどうか。sink.file-cached.enable=trueVVR 8.0.10+。
sink.file-cached.write.max-retries いいえ 3 INTEGER ファイルキャッシュモードでのデータアップロードのリトライ回数。sink.file-cached.enable=trueVVR 8.0.10+。
upsert.writer.max-retries いいえ 3 INTEGER Upsert Writer セッションでバケットへの書き込みの最大リトライ回数。VVR 8.0.10 以降。
upsert.writer.buffer-size いいえ 64 MB MEMORYSIZE Upsert Writer セッション内のすべてのバケットにわたる合計バッファーサイズ。合計がこのしきい値に達するとデータがフラッシュされます。書き込み効率を向上させるために増やし、多くのパーティションへの書き込みが OOM エラーを引き起こす場合は減らしてください。VVR 8.0.10 以降。
upsert.writer.bucket.buffer-size いいえ 1 MB MEMORYSIZE Upsert Writer セッションのバケットごとのバッファーサイズ。Flink サーバーのメモリが不足している場合は減らしてください。VVR 8.0.10 以降。
upsert.write.bucket.num はい INTEGER ターゲット Delta テーブルのバケット数。Delta テーブルで設定された write.bucket.num と一致する必要があります。VVR 8.0.10 以降。
upsert.write.slot-num いいえ 1 INTEGER アップサートセッションごとのトンネルスロット数。VVR 8.0.10 以降。
upsert.commit.max-retries いいえ 3 INTEGER アップサートセッションコミットの最大リトライ回数。VVR 8.0.10 以降。
upsert.commit.thread-num いいえ 16 INTEGER アップサートセッションコミットの並列度。大きな値は避けてください。過剰な同時コミットはリソース消費を増加させ、パフォーマンスの問題を引き起こす可能性があります。VVR 8.0.10 以降。
upsert.commit.timeout いいえ 600 INTEGER アップサートセッションコミットのタイムアウト (秒)。VVR 8.0.10 以降。
upsert.flush.concurrent いいえ 2 INTEGER パーティションごとの最大同時バケットフラッシュ数。各バケットフラッシュは Tunnel スロットを占有します。VVR 8.0.10 以降。
insert.commit.thread-num いいえ 16 INTEGER 挿入セッションコミットの並列度。VVR 8.0.10 以降。
insert.arrow-writer.enable いいえ false BOOLEAN 挿入に Arrow フォーマットを使用します。VVR 8.0.10 以降。
insert.arrow-writer.batch-size いいえ 512 INTEGER Arrow フォーマットバッチごとの最大行数。VVR 8.0.10 以降。
insert.arrow-writer.flush-interval いいえ 100000 INTEGER ライターのフラッシュ間隔 (ミリ秒)。VVR 8.0.10 以降。
insert.writer.buffer-size いいえ 64 MB MEMORYSIZE バッファードライターのキャッシュサイズ。VVR 8.0.10 以降。
upsert.partial-column.enable いいえ false BOOLEAN 特定の列のデータ更新指定された列のみを更新します (部分列更新)。Delta テーブルシンクにのみ適用されます。詳細については、「」をご参照ください。true の場合: 同じプライマリキーを持つレコードが存在する場合、指定された非 null フィールドが上書きされます。一致するレコードが存在しない場合、指定された列に新しい値を持つ新しいレコードが挿入され、指定されていないすべての列は null になります。VVR 8.0.11 以降。

ディメンションテーブルオプション

デプロイメントが開始されると、ディメンションテーブルは partition で指定されたパーティションからすべてのデータをロードします。partition オプションは max_pt() 関数をサポートします。キャッシュのリロード時に、最新のパーティションが再読み込みされます。partitionmax_two_pt() に設定すると、2 つのパーティションからデータがロードされます。

ディメンションテーブルには cache=ALL が必要です。join ノードのメモリをリモートテーブルデータのサイズの少なくとも 4 倍に増やしてください。大きなディメンションテーブルの場合は、SHUFFLE_HASH ヒントを使用してデータを均等に分散させます。頻繁な Java 仮想マシン (JVM) のガベージコレクション (GC) を引き起こす超大規模テーブルの場合は、LRU (Least Recently Used) キャッシュポリシーを持つキー・バリューディメンションテーブル (例: ApsaraDB for HBase ディメンションテーブル) に変換してください。
オプション 必須 デフォルト 説明
cache はい STRING キャッシュポリシー。ALL に設定し、DDL 文で明示的に宣言する必要があります。すべてのディメンションテーブルデータは、デプロイメントが実行される前にキャッシュにロードされます。その後のルックアップはキャッシュのみを検索します。エントリの有効期限が切れると、キャッシュは再読み込みされます。
cacheSize いいえ 100000 LONG キャッシュする最大行数。超えた場合、エラー "Row count of table <table-name> partition <partition-name> exceeds maxRowCount limit" が表示されます。大きなキャッシュは大量の JVM ヒープメモリを消費し、起動とキャッシュのリフレッシュを遅くします。この値は、ワークロードで必要な場合にのみ増やしてください。
cacheTTLMs いいえ Long.MAX_VALUE LONG キャッシュのタイムアウト (ミリ秒)。
cacheReloadTimeBlackList いいえ STRING キャッシュがリフレッシュされない期間。ピークトラフィック期間 (プロモーションイベントなど) 中に使用して、キャッシュのリフレッシュによるデプロイメントの不安定性を防ぎます。詳細については、「アップストリームおよびダウンストリームストレージに関するよくある質問」の「cacheReloadTimeBlackList の設定方法」セクションをご参照ください。
maxLoadRetries いいえ 10 INTEGER デプロイメント起動時の初期キャッシュロードの最大リトライ回数。リトライ回数を使い切ると、デプロイメントは失敗します。

データ型のマッピング

MaxCompute のデータの型の完全なリストについては、「MaxCompute データ型システム バージョン 2.0」をご参照ください。

MaxCompute 型 Flink 型
BOOLEAN BOOLEAN
TINYINT TINYINT
SMALLINT SMALLINT
INT INTEGER
BIGINT BIGINT
FLOAT FLOAT
DOUBLE DOUBLE
DECIMAL(precision, scale) DECIMAL(precision, scale)
CHAR(n) CHAR(n)
VARCHAR(n) VARCHAR(n)
STRING STRING
BINARY BYTES
DATE DATE
DATETIME TIMESTAMP(3)
TIMESTAMP TIMESTAMP(9)
TIMESTAMP_NTZ TIMESTAMP(9)
ARRAY ARRAY
MAP MAP
STRUCT ROW
JSON STRING
重要

MaxCompute 物理テーブルにネストされた複合型フィールド (ARRAY、MAP、または STRUCT) または JSON フィールドが含まれている場合、Realtime Compute for Apache Flink がデータを正しく読み書きできるように、テーブル作成時に tblproperties('columnar.nested.type'='true') を設定してください。

Flink CDC (パブリックプレビュー)

MaxCompute コネクタは、YAML ベースのジョブでシンクとして Change Data Capture (CDC) データをインジェストできます。VVR 11.1 以降が必要です。

構文

source:
  type: xxx

sink:
  type: maxcompute
  name: MaxComputeSink
  access-id: ${your_accessId}
  access-key: ${your_accessKey}
  endpoint: ${your_maxcompute_endpoint}
  project: ${your_project}
  buckets-num: 8

設定オプション

オプション 必須 デフォルト値 説明
type はい String maxcompute に設定します。
name いいえ String Sink 名。
access-id はい String Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。Resource Access Management (RAM) コンソールから取得します。
access-key はい String AccessKey Secret。
endpoint はい String エンドポイントMaxCompute エンドポイント。リージョンとネットワーク接続方法に基づいて設定します。詳細は、をご参照ください。
project はい String MaxCompute プロジェクト名。確認するには、MaxCompute コンソールにログインし、[ワークスペース] > [プロジェクト] に移動して、プロジェクト名をコピーします。
tunnel.endpoint いいえ String MaxCompute Tunnel エンドポイント。通常は自動的に推論されます。プロキシサーバーを使用している場合など、特殊なネットワーク環境で必要になります。
quota.name いいえ String 専用リソースグループのクォータ名。指定しない場合は、共有リソースグループが使用されます。
sts-token いいえ String RAM ロール認証用の Security Token Service (STS) トークン。RAM ロールで MaxCompute にアクセスする場合に必要です。
buckets-num いいえ 16 Integer ほぼリアルタイムのデータウェアハウス自動作成された MaxCompute Delta テーブルのバケット数。詳細は、をご参照ください。
compress.algorithm いいえ zlib String データ圧縮アルゴリズム。有効な値: raw (圧縮なし)、zlibsnappy
total.buffer-size いいえ 64 MB String インメモリバッファーサイズ。パーティションテーブルの場合、パーティションごとに適用されます。非パーティション化テーブルの場合、テーブルごとに適用されます。異なるパーティションまたはテーブルのバッファーは独立しています。バッファーがいっぱいになると、データはフラッシュされます。
bucket.buffer-size いいえ 4 MB String バケットごとのバッファーサイズ。MaxCompute Delta テーブルへの書き込み時にのみ適用されます。
commit.thread-num いいえ 16 Integer チェックポイント作成時に同時にコミットされるパーティションまたはテーブルの最大数。
flush.concurrent-num いいえ 4 Integer 同時にフラッシュされるバケットの最大数。MaxCompute Delta テーブルへの書き込み時にのみ適用されます。

テーブルロケーションのマッピング

コネクタが MaxCompute でテーブルを自動作成する場合、ロケーションは次のようにマッピングされます。

重要

MaxCompute プロジェクトでスキーマ機能が無効になっている場合、コネクタは tableId.namespace を無視します。この場合、単一のデータベース (またはその論理的な同等物) のみが MaxCompute にインジェストされます。たとえば、MySQL からインジェストする場合、1 つの MySQL データベースのみが対象となります。

MySQL ロケーション Flink CDC 抽象 MaxCompute ロケーション
N/A プロジェクト (設定から) プロジェクト
データベース TableId.namespace スキーマ (スキーマが無効な場合は無視)
テーブル TableId.tableName テーブル

データ型のマッピング

Flink CDC 型 MaxCompute 型
CHAR STRING
VARCHAR STRING
BOOLEAN BOOLEAN
BINARY/VARBINARY BINARY
DECIMAL DECIMAL
TINYINT TINYINT
SMALLINT SMALLINT
INTEGER INTEGER
BIGINT BIGINT
FLOAT FLOAT
DOUBLE DOUBLE
TIME_WITHOUT_TIME_ZONE STRING
DATE DATE
TIMESTAMP_WITHOUT_TIME_ZONE TIMESTAMP_NTZ
TIMESTAMP_WITH_LOCAL_TIME_ZONE (精度 > 3) TIMESTAMP
TIMESTAMP_WITH_LOCAL_TIME_ZONE (精度 <= 3) DATETIME
TIMESTAMP_WITH_TIME_ZONE (精度 > 3) TIMESTAMP
TIMESTAMP_WITH_TIME_ZONE (精度 <= 3) DATETIME
ARRAY ARRAY
MAP MAP
ROW STRUCT

SQL API

ソーステーブル

パーティションからすべてのデータを読み取る

partition で指定されたパーティションからすべてのデータを読み取ります。

CREATE TEMPORARY TABLE odps_source (
  cid VARCHAR,
  rt DOUBLE
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpointName>',
  'project' = '<yourProjectName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'partition' = 'ds=201809*'
);

CREATE TEMPORARY TABLE blackhole_sink (
  cid VARCHAR,
  invoke_count BIGINT
) WITH (
  'connector' = 'blackhole'
);

INSERT INTO blackhole_sink
SELECT
   cid,
   COUNT(*) AS invoke_count
FROM odps_source GROUP BY cid;
増分データを読み取る

startPartition で指定されたパーティションからデータの読み取りを開始し、新しいパーティションを継続的に監視します。

CREATE TEMPORARY TABLE odps_source (
  cid VARCHAR,
  rt DOUBLE
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpointName>',
  'project' = '<yourProjectName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'startPartition' = 'yyyy=2018,MM=09,dd=05' -- 20180905 パーティションから読み取りを開始します。
);

CREATE TEMPORARY TABLE blackhole_sink (
  cid VARCHAR,
  invoke_count BIGINT
) WITH (
  'connector' = 'blackhole'
);

INSERT INTO blackhole_sink
SELECT cid, COUNT(*) AS invoke_count
FROM odps_source GROUP BY cid;

結果テーブル

静的パーティションへの書き込み

partition で指定されたパーティションに書き込みます。

CREATE TEMPORARY TABLE datagen_source (
  id INT,
  len INT,
  content VARCHAR
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE odps_sink (
  id INT,
  len INT,
  content VARCHAR
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpoint>',
  'project' = '<yourProjectName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'partition' = 'ds=20180905' -- パーティション 20180905 に書き込みます。
);

INSERT INTO odps_sink
SELECT
  id, len, content
FROM datagen_source;
動的パーティションへの書き込み

ds 列の値によってランタイムに決定されるパーティションにデータを書き込みます。

CREATE TEMPORARY TABLE datagen_source (
  id INT,
  len INT,
  content VARCHAR,
  c TIMESTAMP
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE odps_sink (
  id  INT,
  len INT,
  content VARCHAR,
  ds VARCHAR -- 動的パーティション列。
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpoint>',
  'project' = '<yourProjectName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'partition' = 'ds' -- 値を省略します。データは ds フィールドに基づいてパーティションにルーティングされます。
);

INSERT INTO odps_sink
SELECT
   id,
   len,
   content,
   DATE_FORMAT(c, 'yyMMdd') as ds
FROM datagen_source;

ディメンションテーブル

単一値キー

各キーが正確に 1 つの行にマッピングされる場合にプライマリキーを指定します。

CREATE TEMPORARY TABLE datagen_source (
  k INT,
  v VARCHAR
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE odps_dim (
  k INT,
  v VARCHAR,
  PRIMARY KEY (k) NOT ENFORCED  -- プライマリキーを指定します。
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpoint>',
  'project' = '<yourProjectName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'partition' = 'ds=20180905',
  'cache' = 'ALL'
);

CREATE TEMPORARY TABLE blackhole_sink (
  k VARCHAR,
  v1 VARCHAR,
  v2 VARCHAR
) WITH (
  'connector' = 'blackhole'
);

INSERT INTO blackhole_sink
SELECT k, s.v, d.v
FROM datagen_source AS s
INNER JOIN odps_dim FOR SYSTEM_TIME AS OF PROCTIME() AS d ON s.k = d.k;
複数値キー

キーが複数の行にマッピングされる可能性がある場合にプライマリキーを省略します。

CREATE TEMPORARY TABLE datagen_source (
  k INT,
  v VARCHAR
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE odps_dim (
  k INT,
  v VARCHAR
  -- 複数値のルックアップにはプライマリキーは不要です。
) WITH (
  'connector' = 'odps',
  'endpoint' = '<yourEndpoint>',
  'project' = '<yourProjectName>',
  'tableName' = '<yourTableName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'partition' = 'ds=20180905',
  'cache' = 'ALL'
);

CREATE TEMPORARY TABLE blackhole_sink (
  k VARCHAR,
  v1 VARCHAR,
  v2 VARCHAR
) WITH (
  'connector' = 'blackhole'
);

INSERT INTO blackhole_sink
SELECT k, s.v, d.v
FROM datagen_source AS s
INNER JOIN odps_dim FOR SYSTEM_TIME AS OF PROCTIME() AS d ON s.k = d.k;

DataStream API

重要
  • DataStream API を MaxCompute で使用するには、DataStream コネクタを設定します。詳細については、「DataStream コネクタの統合」をご参照ください。

  • VVR 6.0.6+ は、MaxCompute コネクタを使用した DataStream プログラムのオンプレミスでのデバッグを最大 30 分間サポートします。30 分を超えたセッションはエラーで終了されます。詳細については、「コネクタをローカルでデバッグする」をご参照ください。

  • MaxCompute Delta テーブル (プライマリキーと transactional=true で作成されたテーブル) からの読み取りはサポートされていません。

SQL を使用して MaxCompute テーブルを宣言し、Table API または DataStream API を介してアクセスします。

ソーステーブルへの接続

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
tEnv.executeSql(String.join(
    "\n",
    "CREATE TEMPORARY TABLE IF NOT EXISTS odps_source (",
    "  cid VARCHAR,",
    "  rt DOUBLE",
    ") WITH (",
    "  'connector' = 'odps',",
    "  'endpoint' = '<yourEndpointName>',",
    "  'project' = '<yourProjectName>',",
    "  'tableName' = '<yourTableName>',",
    "  'accessId' = '<yourAccessId>',",
    "  'accessKey' = '<yourAccessPassword>',",
    "  'partition' = 'ds=201809*'",
    ")");
DataStream<Row> source = tEnv.toDataStream(tEnv.from("odps_source"));
source.print();
env.execute("odps source");

シンクへの接続

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
tEnv.executeSql(String.join(
    "\n",
    "CREATE TEMPORARY TABLE IF NOT EXISTS odps_sink (",
    "  cid VARCHAR,",
    "  rt DOUBLE",
    ") WITH (",
    "  'connector' = 'odps',",
    "  'endpoint' = '<yourEndpointName>',",
    "  'project' = '<yourProjectName>',",
    "  'tableName' = '<yourTableName>',",
    "  'accessId' = '<yourAccessId>',",
    "  'accessKey' = '<yourAccessPassword>',",
    "  'partition' = 'ds=20180905'",
    ")");
DataStream<Row> data = env.fromElements(
    Row.of("id0", 3.),
    Row.of("id1", 4.));
tEnv.fromDataStream(data).insertInto("odps_sink").execute();

Maven 依存関係

MaxCompute DataStream コネクタをプロジェクトに追加します。すべてのバージョンは Maven セントラルリポジトリで入手できます。

<dependency>
    <groupId>com.alibaba.ververica</groupId>
    <artifactId>ververica-connector-odps</artifactId>
    <version>${vvr-version}</version>
</dependency>

次のステップ