背景情報

このドキュメントでは、1 つの Alibaba Cloud アカウントで Table Store と MaxCompute 間のシームレスな接続を確立する方法について説明します。

ビッグデータコンピューティングサービスとして、 MaxComputeは、高速かつ完全にホストされた PB レベルのデータウェアハウスソリューションを提供し、大量のデータを経済的かつ効果的に分析し処理することができます。 単純な DDL ステートメントを使用して MaxCompute 上に外部テーブルを作成し、MaxCompute テーブルを外部データソースに関連付けてさまざまなデータアクセスおよび出力機能を提供できます。 MaxCompute テーブルには構造化データのみを含めることができ、外部テーブルには構造化データまたは非構造化データを含めることができます。

Table Store と MaxCompute の両方に独自の型システムがあり、次の表にそれらのマッピングを示します。
Table Store MaxCompute
STRING 型 STRING 型
INTEGER 型 BIGINT 型
DOUBLE 型 DOUBLE 型
BOOLEAN 型 BOOLEAN 型
BINARY 型 BINARY 型

準備

MaxCompute を使用して Table Store にアクセスする前の準備

  1. MaxCompute サービスをアクティベートします。
  2. MaxCompute プロジェクトを作成します。
  3. AccessKeyを作成します。
  4. RAM コンソールで、MaxCompute に Table Store へのアクセスを許可します。
    • 方法1: Alibaba Cloud アカウントでログインし、 ここをクリックしてクイック認証します。

    • 方法2: 以下のステップを使用して手動許可を実行してください。

      1. RAM コンソールにログインします。
      2. ロール」ページで、ユーザーロール AliyunODPSDefaultRole を作成します。
      3. ロールの詳細」ページで、ポリシーの内容を設定します。
        ポリシーの内容は次のように設定されています。
        {
        "Statement": [
        {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
         "Service": [
           "odps.aliyuncs.com"
         ]
        }
        }
        ],
        "Version": "1"
        }
      4. ポリシー」ページで、認証ポリシー AliyunODPSRolePolicy を作成します。
        ポリシーの内容は次のように設定されています。
        {
        "Version": "1",
        "Statement": [
         {
           "Action": [
             "ots:ListTable",
             "ots:DescribeTable",
             "ots:GetRow",
             "ots:PutRow",
             "ots:UpdateRow",
             "ots:DeleteRow",
             "ots:GetRange",
             "ots:BatchGetRow",
             "ots:BatchWriteRow",
             "ots:ComputeSplitPointsBySize"
           ],
           "Resource": "*",
           "Effect": "Allow"
         }
        ]
        }
        アクセス許可をカスタマイズすることもできます。
      5. ロール」ページで、ロール AliyunODPSDefaultRole に AliyunODPSRolePolicy 許可を付与します。
  5. Table Store コンソールで、インスタンスを作成し、テーブルを作成します。

    この例では、Table Store インスタンスとデータテーブルの詳細は次のとおりです。

    • インスタンス名: cap1
    • データテーブル名: vehicle_track
    • プライマリキー情報: vid (整数)、gt (整数)
    • エンドポイント: 「 https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
      MaxCompute を使用して Table Store にアクセスするときは、Table Store のプライベートネットワークアドレスを使用することを推奨します。
    • インスタンスのネットワークタイプを 任意のネットワークに設定します。

ステップ 1 クライアントのインストールと設定

  1. MaxCompute クライアントをダウンロードして解凍します。
    JRE 1.7 以降のバージョンがコンピュータにインストールされていることを確認してください。
  2. "conf/odps_config.ini" ファイルを編集して、クライアントを設定します。
    access_id=*******************
    access_key=*********************
     # Alibaba Cloud アカウントの AccessID と AccessKey は Alibaba Cloud の公式 Web サイトの「管理コンソール」の「AccessKeys」ページで確認できます。
    project_name=my_project
     # アクセスしたいプロジェクトスペースを指定します。
    end_point=https://service.odps.aliyun.com/api
     # MaxCompute サービスのアクセスリンク。
    tunnel_endpoint=https://dt.odps.aliyun.com
     # MaxCompute Tunnel サービスのアクセスリンク。
    log_view_host=http://logview.odps.aliyun.com
     # ジョブを実行した後、クライアントはそのジョブの LogView アドレスを返します。 アドレスにアクセスして、実行されたジョブの詳細を確認してください。
    https_check=true
     # HTTPS アクセスを有効にするかどうかを決定します。
    "odps_config.ini" ファイルでは、 "#" が注釈として使用されます。 MaxCompute クライアントでは、 "--" が注釈として使用されます。
  3. "bin/odpscmd.bat" を実行して、"show tables;" と入力します。

    現在の MaxCompute プロジェクトの表の表示は、前の設定が正しいことを示しています。

ステップ 2 External Store の作成

MaxCompute データテーブル (ots_vehicle_track) を作成し、それを Table Store のテーブル (vehicle_track) に関連付けます。

この例では、関連付けられたテーブルは次のように詳述されています。

  • インスタンス名: cap1
  • テーブル名: vehicle_track
  • プライマリキー情報: vid (int)、gt (int)
  • エンドポイント: 「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 StorageHandler は、Table Store データを処理するために MaxCompute を内蔵しています。 これは MaxCompute と Table Store の間の相互作用を定義し、関連するロジックは MaxCompute によって実装されています。
(2) SERDEPROPERITES パラメーターオプションを提供するインターフェイスです。 TableStoreStorageHandler を使用する場合は、tablestore.columns.mapping と tablestore.table.name の 2 つのオプションを指定する必要があります。
(3) tablestore.columns.mapping 必須オプション です。 MaxCompute がアクセスする Table Store の列は、プライマリキーと属性の列を含みます。 Table Store では、":" を含む列 (この例では :vid や :gt) はプライマリキー列で、その他は属性列です。

マッピングを指定するときは、指定された Table Store テーブルのすべてのプライマリキー列と、MaxCompute がアクセスする属性列を指定する必要があります。

(4) tablestore.table.name アクセスする Table Store テーブルの名前。 指定された Table Store テーブル名が正しくない (存在しない) 場合、エラーが報告されます。 MaxCompute は Table Store テーブルを事前に作成しません。
(5) LOCATION インスタンス名とエンドポイントを含む、アクセスする Table Store のインスタンス情報です。

ステップ 3 外部テーブルを介した Table Store のデータへのアクセス

外部テーブルが作成されると、Table Store データが 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;

次のような結果が返されます。