本トピックでは、同一の Alibaba Cloud アカウント内で MaxCompute と Tablestore を接続する方法について説明します。
背景情報
MaxCompute は、ペタバイト規模のデータ向けに高速かつフルマネージドなデータウェアハウスソリューションを提供するビッグデータ処理サービスです。コスト効率が高く、効率的な方法で大規模なデータセットを処理および分析できます。シンプルなデータ定義言語 (DDL) 文を使用することで、MaxCompute 内に外部データソースと接続する外部テーブルを作成できます。これにより、さまざまな種類のデータをインジェストおよびエクスポートできます。MaxCompute のテーブルは構造化データを格納しますが、外部テーブルは構造化データに限定されません。
Tablestore と MaxCompute にはそれぞれ独自の型システムがあります。以下の表に、両者のデータ型マッピングを示します。
Tablestore | MaxCompute |
STRING | STRING |
INTEGER | BIGINT |
DOUBLE | DOUBLE |
BOOLEAN | BOOLEAN |
BINARY | BINARY |
前提条件
MaxCompute から Tablestore にアクセスする前に、以下の前提条件を満たしてください。
AccessKey ペアの作成。
RAM コンソールで、MaxCompute が Tablestore にアクセスできるように権限を付与します。詳細については、「」および「クロスアカウントでの権限付与」をご参照ください。
Tablestore コンソールで、インスタンスの作成およびデータテーブルの作成を行います。
本例では、Tablestore インスタンスおよびデータテーブルの詳細は以下のとおりです。
インスタンス名:cap1
データテーブル名:vehicle_track
プライマリキー:vid(integer)、gt(integer)
エンドポイント:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com説明MaxCompute から Tablestore にアクセスする際は、Tablestore インスタンスのプライベートエンドポイントの使用を推奨します。
インスタンスのネットワークアクセス制御を設定します。デフォルトでは、Tablestore は任意のネットワークからのアクセスを許可しています。デフォルト設定(以下)のまま使用しても構いません。

ステップ 1:クライアントのインストールと構成
MaxCompute クライアント をダウンロードして解凍します。
説明ご利用のマシンに Java Runtime Environment(JRE)1.7 以降がインストールされていることを確認してください。
conf/odps_config.iniファイルを編集し、クライアントを以下のように構成します。# Alibaba Cloud アカウントの AccessKey ペア(AccessKey ID および AccessKey Secret)。AccessKey ペアを表示するには、Alibaba Cloud 管理コンソールにログインし、右上隅のプロフィール画像にカーソルを合わせて [AccessKey 管理] をクリックします。 access_id=******************* access_key=********************* # アクセス対象のプロジェクト。 project_name=my_project # MaxCompute サービスのエンドポイント。 end_point=https://service.odps.aliyun.com/api # MaxCompute Tunnel サービスのエンドポイント。 tunnel_endpoint=https://dt.odps.aliyun.com # ジョブ実行後にクライアントが返す Logview URL。この URL を開くことで、ジョブ実行の詳細情報を確認できます。 log_view_host=http://logview.odps.aliyun.com # HTTPS 経由のアクセスを有効にするかどうかを指定します。 https_check=true説明odps_config.iniファイルでは、シャープ記号(#)がコメントを表しますが、MaxCompute クライアントではダブルハイフン(--)がコメントを表します。bin/odpscmd.batを実行し、show tables;を入力します。現在の MaxCompute プロジェクト内のテーブルが表示された場合、構成は正しく設定されています。

ステップ 2:外部テーブルの作成
MaxCompute の外部テーブル ots_vehicle_track を作成し、Tablestore の vehicle_track データテーブルに関連付けます。
関連付けるデータテーブルの情報は以下のとおりです。
インスタンス名:cap1
データテーブル名:vehicle_track
プライマリキー:vid(integer)、gt(integer)
エンドポイント:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
CREATE EXTERNAL TABLE IF NOT EXISTS ots_vehicle_track
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double ,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)
WITH SERDEPROPERTIES ( -- (2)
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption', -- (3)
'tablestore.table.name'='vehicle_track' -- (4)
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'; -- (5)以下の表に、各パラメーターの説明を示します。
番号 | パラメーター | 説明 |
(1) | com.aliyun.odps.TableStoreStorageHandler | Tablestore データ用の組み込み MaxCompute ストレージハンドラ。MaxCompute が Tablestore とどのように相互作用するかを定義します。 |
(2) | SERDEPROPERITES | ストレージハンドラのプロパティを指定します。 |
(3) | tablestore.columns.mapping | 必須。MaxCompute がアクセスする Tablestore テーブルの列(プライマリキーおよび属性列)を指定します。コロン( |
(4) | tablestore.table.name | アクセス対象の Tablestore テーブルの名前です。指定したテーブルが存在しない場合、MaxCompute はエラーを報告します。MaxCompute は Tablestore テーブルを自動的に作成しません。 |
(5) | LOCATION | アクセス対象の Tablestore インスタンスに関する情報を指定します。インスタンス名およびエンドポイントを含みます。 |
ステップ 3:外部テーブルを用いたデータアクセス
高同時実行数により Tablestore インスタンスの負荷が増加し、オンラインサービスのレイテンシーが高くなるだけでなく、リクエスト失敗を引き起こす可能性があります。並列度は set odps.sql.mapper.split.size=256 を設定することで調整できます。値を大きくすると同時実行数が減少し、小さくすると増加します。詳細については、「SQL のチューニング」をご参照ください。
外部テーブルが作成されると、Tablestore のデータが MaxCompute エコシステムで利用可能になります。MaxCompute SQL コマンドを使用してデータにアクセスできます。
-- タイムスタンプ 1469171387 より前の、VID が 4 未満の車両の平均速度および燃料消費量を計算します。
select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;実行結果の例:
