MaxCompute の外部テーブルを使用すると、データ移行を行うことなく、Tablestore のデータに対して直接 SQL 分析を実行できます。 このガイドでは、同一 Alibaba Cloud アカウント配下にある Tablestore のデータテーブルにマッピングされる外部テーブルを MaxCompute で作成する手順を説明します。
背景情報
MaxCompute は、ペタバイト規模のデータウェアハウスと分析機能を提供するフルマネージドのビッグデータコンピューティングサービスです。 単一の DDL ステートメントを使用して MaxCompute に外部テーブルを作成し、外部データソースに接続してデータインジェストとエクスポートを行うことができます。 MaxCompute のネイティブテーブルが構造化データのみを格納するのとは異なり、外部テーブルは構造化データと非構造化データの両方をサポートします。
Tablestore と MaxCompute は異なる型システムを使用します。 次の表に、両サービス間のデータ型のマッピングを示します。
|
Tablestore |
MaxCompute |
|
STRING |
STRING |
|
INTEGER |
BIGINT |
|
DOUBLE |
DOUBLE |
|
BOOLEAN |
BOOLEAN |
|
BINARY |
BINARY |
前提条件
開始する前に、以下のものが準備できていることを確認してください。
-
MaxCompute が有効化済みであること。
-
MaxCompute のワークスペース。 詳細については、「ワークスペースの作成」をご参照ください。
-
認証用の AccessKey ペア。
-
RAM コンソールで MaxCompute に Tablestore へのアクセス権限が付与されていること。 詳細については、「クロスアカウント権限付与」をご参照ください。
-
Tablestore コンソールで Tablestore インスタンスとデータテーブルが作成済みであること。 詳細については、「インスタンスの作成」および「データテーブルの作成」をご参照ください。
このガイドでは、以下のリソース例を使用します。
-
インスタンス名: cap1
-
データテーブル名: vehicle_track
-
プライマリキー: vid (INTEGER)、gt (INTEGER) (MaxCompute では BIGINT 型にマッピング)
-
エンドポイント:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com説明MaxCompute からアクセスする際は、Tablestore インスタンスのプライベートエンドポイントを使用してください。
-
インスタンスのネットワークアクセス制御を設定します。 デフォルトでは、Tablestore は任意のネットワークからのアクセスを許可します。 以下のようにデフォルト設定を維持します。
設定は以下のとおりです。デフォルトの [アクセスタイプ] は [カスタム] です。 [許可するネットワークタイプ] で、[VPC]、[クラシックネットワーク]、[パブリックネットワーク] が選択されています。 [許可するソースタイプ] で、[信頼できるゲートウェイ (コンソール)] が選択されています。 [設定] をクリックして設定を保存します。
-
ステップ1:MaxCompute クライアントのインストールと設定
-
MaxCompute クライアントをダウンロードして解凍します。
説明お使いのマシンに Java Runtime Environment (JRE) 1.7 以降がインストールされていることを確認してください。
-
conf/odps_config.iniファイルを編集し、以下のように設定します。# Alibaba Cloud アカウントの AccessKey ペア。AccessKey ID と AccessKey シークレットで構成されます。 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 プロジェクトのテーブルが表示されれば、正しく設定されています。
odps@ MCOTStest>show tables; ALIYUN$document@aliyun-test.com:bank_data ALIYUN$document@aliyun-test.com:result_table OK
ステップ2:外部テーブルの作成
Tablestore の vehicle_track データテーブルにマッピングされる ots_vehicle_track という名前の MaxCompute 外部テーブルを作成します。
ターゲットのデータテーブルのプロパティは以下のとおりです。
-
インスタンス名: cap1
-
データテーブル名: vehicle_track
-
プライマリキー: vid (INTEGER)、gt (INTEGER) (MaxCompute では BIGINT 型にマッピング)
-
エンドポイント:
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)
次の表で、DDL ステートメントのパラメーターを説明します。
|
番号 |
パラメーター |
説明 |
|
(1) |
com.aliyun.odps.TableStoreStorageHandler |
Tablestore 用の MaxCompute 組み込みストレージハンドラーです。 MaxCompute が Tablestore との間で読み書きする方法を定義します。 |
|
(2) |
SERDEPROPERITES |
シリアル化および逆シリアル化のプロパティインターフェイスです。 TableStoreStorageHandler を使用する場合、 |
|
(3) |
tablestore.columns.mapping |
必須。 MaxCompute がアクセスする Tablestore の列 (プライマリキー列と属性列を含む) を指定します。 コロン ( |
|
(4) |
tablestore.table.name |
アクセスする Tablestore テーブルの名前。 指定したテーブルが存在しない場合、MaxCompute はエラーを返します。 MaxCompute は Tablestore テーブルを自動的に作成しません。 |
|
(5) |
LOCATION |
インスタンス名やエンドポイントなど、Tablestore インスタンスの情報。 |
ステップ3:外部テーブルを介した Tablestore データのクエリ
高い同時実行性は Tablestore インスタンスの負荷を増大させ、オンラインワークロードのレイテンシー増加やリクエスト失敗を引き起こす可能性があります。 並列度を制御するには、set odps.sql.mapper.split.size=256; を実行してください。 値を大きくすると同時実行性は低下し、小さくすると上昇します。 詳細については、「SQL チューニング」をご参照ください。
外部テーブルを作成すると、Tablestore のデータが MaxCompute エコシステムで利用可能になります。 MaxCompute SQL を使用してデータをクエリします。
-- VID が 4 未満、かつタイムスタンプが 1469171387 より前の車両データについて、平均速度と燃料消費量を計算します。
select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
結果の例:
odps@ analysis_vehicle>select vid,count(*), avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
ID = 20170306160538185gsvlupk2
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=analysis_vehicle&i=20170306160538185gsvlupk2&token=ajhxdXZNWWVPcTNrWkFOS0xpSGtoM2tFWGEwPSxPRFBT
09CTzoxNjA0MzM3MzgzMTc0NjE5LDE0ODk0MjExMzgseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2NJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
Job Queueing.
STAGES STATUS TOTAL COMPLETED RUNNING PENDING BACKUP
M1_job_0 .............. TERMINATED 1 1 0 0 0
R2_1_job_0 ............. TERMINATED 1 1 0 0 0
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 51.18 s
Summary:
+------------+------------+----------------------+----------------------+
| vid | _c1 | _c2 | _c3 |
+------------+------------+----------------------+----------------------+
| 0 | 47 | 0.11622589796672624 | 6.5155061805308145 |
| 1 | 47 | 0.11200649789552555 | 6.5673983001829885 |
| 2 | 47 | 0.098971763146085 | 6.738738527883797 |
| 3 | 47 | 0.11503916531605494 | 6.6038902692751895 |
+------------+------------+----------------------+----------------------+