このドキュメントでは、Table Store から MaxCompute コンピューティング環境にデータをインポートする方法を説明します。 これにより、複数のデータソース間のシームレスな接続が可能になります。
Table Store は、Alibaba Cloud の Apsara 分散ファイルシステム上に構築された NoSQL データベースサービスです。ユーザーは、膨大な量の構造化データをリアルタイムで保存し、アクセスすることができます。 Table Store の詳細については、「Table Store の概要」をご参照ください。
MaxCompute と TableStore は、2 つの独立したビッグデータコンピューティングサービスとストレージサービスです。 したがって、これら 2 つのサービスの間のネットワークが有効であることを確認する必要があります。
MaxCompute のパブリッククラウドサービスが Table Store に保存されているデータにアクセスする場合、Table Store のプライベートネットワークアドレスを使用することを推奨します。通常、ホスト名の末尾に 'ots-internal.aliyuncs.com' を付けたものです。例: tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com
他のドキュメントで、OSS 非構造化データへのアクセスの使い方を説明しました。
MaxCompute 型 | TableStore 型 |
---|---|
STRING | STRING |
BIGINT | INTEGER |
DOUBLE | Double |
BOOLEAN | BOOLEAN |
BINARY | BINARY |
STS モードでの権限付与
MaxCompute から Table Store データにアクセスするには、安全な権限付与手段が必要です。 この問題に関して、MaxCompute は Alibaba Cloud Resource Access Management (RAM) と Token Service (STS) を統合して安全なデータアクセスを実装します。
- MaxCompute と Table Store の所有者が同じアカウントの場合は、Alibaba Cloud アカウントで直接ログインし、ここをクリックして権限を付与します。
- カスタム権限付与
- まず、RAM コンソールで、Table Store アクセス権限を MaxCompute に付与する必要があります。
RAM コンソールにログイン (MaxCompute と Table Store が同じアカウントでない場合は、Table Store アカウントでログインして権限を付与する必要があります) し、ロール AliyunODPSDefaultRole を作成します。
- ポリシーの内容を次のように設定します。
--if MaxCompute and Table Store are same account { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "odps.aliyuncs.com" ] } } ], "Version": "1" } --if MaxCompute and Table Store are not the same account { "Statement ":[ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "MaxCompute's Owner cloud account UID@odps.aliyuncs.com" ] } } ], "Version": "1" }
注 右上隅にあるアバターをクリックして、[課金管理] ページを開き、アカウント UID を確認します。 - このロールの認証ポリシー 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" } ] } --You can also customize other permissions
- このロールに AliyunODPSRolePolicy 権限を付与します。
- まず、RAM コンソールで、Table Store アクセス権限を MaxCompute に付与する必要があります。
外部テーブルの作成
MaxCompute では、外部テーブルを作成し、Table Store テーブルデータ記述を MaxCompute メタシステムに追加した後、Table Store データを処理できるようになります。 次の例は、MaxCompute の Table Store アクセスで使用される概念と操作を示しています。
DROP TABLE IF EXISTS ots_table_external;
CREATE EXTERNAL TABLE IF NOT EXISTS ots_table_external
(
odps_orderkey bigint,
odps_orderdate string,
odps_custkey bigint,
odps_orderstatus string,
odps_totalprice double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)
WITH SERDEPROPERTIES ( -- (2)
'tablestore.columns.mapping'=':o_orderkey,:o_orderdate,o_custkey, o_orderstatus,o_totalprice', -- ①
'tablestore.table.name'='ots_tpch_orders' -- ②
'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole' --③
)
LOCATION 'tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com'; -- (3)
- com.aliyun.odps.TableStoreStorageHandler は、Table Store データを処理するための MaxCompute の組み込み StorageHandler です。 これは、MaxCompute と Table Store 間の相互作用を定義します。 関連ロジックは MaxCompute によって実装されています。
- SERDEPROPERITES は、パラメーターオプションを提供するインターフェイスです。 TableStoreStorageHandler を使用する際、tablestore.columns.mapping と tablestore.table.name と odps.properties.rolearn から 2 つオプションを指定する必要があります。
- filepathtablestore.columns.mapping optionfilepath: MaxCompute がアクセスしようとしている Table Store テーブルの列を照会するのに必要です。
- 列名の先頭の
:
は、Table Store の主キーを示します。 この例では、:o_orderkey
と:o_orderdate
が主キー列で、それ以外はすべて属性列です。 - Table Store は最大 4 つの主キーをサポートします。 主キーは、STRING、INTEGER、および BINARY データ型をサポートします。 最初の主キーはパーティションキーです。
- マッピング関係を指定するとき、指定した Table Store テーブルのすべての主キーを指定する必要がありますが、すべての属性列を指定する必要はなく、MaxCompute を使用してアクセスする必要がある属性列のみを指定します。
- 列名の先頭の
- filepathtablestore.table.namefilepath: アクセスする必要がある Table Store テーブルの名前。 誤った Table Store テーブル名 (存在しないテーブルなど) を指定した場合、システムはエラーを報告します。 MaxCompute は、指定された名前で新しい Table Store テーブルを作成しません。
- odps.properties.rolearn: RAM の AliyunODPSDefaultRole にある Arn 情報。 RAM コンソールの [ロールの詳細] から取得できます。
- filepathtablestore.columns.mapping optionfilepath: MaxCompute がアクセスしようとしている Table Store テーブルの列を照会するのに必要です。
- LOCATION 句: Table Store インスタンス名、エンドポイントなどを指定するための特定の情報。 ここでの Table Store データへの安全なアクセスは、前述の RAM/STS 権限付与の前提に基づいています。
desc extended <table_name>;
返された情報の "Extended Info" には、StorageHandler や Location などの外部テーブル情報が含まれています。
外部テーブルを使用したテーブルデータへのアクセス
SELECT odps_orderkey, odps_orderdate, SUM(odps_totalprice) AS sum_total
FROM ots_table_external
WHERE odps_orderkey > 5000 AND odps_orderkey < 7000 AND odps_orderdate >= '1996-05-03' AND odps_orderdate < '1997-05-01'
GROUP BY odps_orderkey, odps_orderdate
HAVING sum_total> 400000.0;
MaxCompute SQL 構文を使用する場合、アクセスしたTable Store の詳細はすべて MaxCompute で処理されます。 これには、列名の選択も含まれます。 たとえば、前述の SQL 文で使用されている列名 (odps_orderkey や odps_totalprice など) は、Table Store で使用されている元の主キー名 (o_orderkey) や属性列名 (o_totalprice) ではありません。 これは、外部テーブルの作成時に使用された DDL 文で、マッピングが既に実行されているためです。 外部テーブルを作成するときに元の Table Store の主キー/列名を保持できます。
CREATE TABLE internal_orders AS
SELECT odps_orderkey, odps_orderdate, odps_custkey, odps_totalprice
FROM ots_table_external
Where fig> 5000;
internal_orders は、MaxCompute 内部テーブルのすべての機能を備えた MaxCompute テーブルです (効率的に圧縮された列ストレージデータ形式、完全な内部マクロデータ、統計情報など)。 また、データは MaxCompute に保存されるため、外部の Table Store データにアクセスする場合よりもアクセス速度が速くなります。 これは、頻繁に計算されるホットスポットデータに特に適しています。
MaxCompute データの Table Store へのエクスポート
INSERT OVERWRITE TABLE ots_table_external
SELECT odps_orderkey, odps_orderdate, odps_custkey, CONCAT(odps_custkey, 'SHIPPED'), CEIL(odps_totalprice)
FROM internal_orders;
INSERT OVERWRITE TABLE ots_table_external
SELECT odps_orderkey, odps_orderdate, odps_custkey, CONCAT(odps_custkey, 'SHIPPED'), CEIL(odps_totalprice)
FROM (SELECT * FROM internal_orders DISTRIBUTE BY rand()) t;
Table Store は KV データの NoSQL ストレージメディアであるので、MaxCompute からのデータ出力は対応する主キーを持つ行にのみ影響します。 この例では、出力は対応する dps_orderkey + odps_orderdate 主キー値を持つ行内のデータにのみ影響します。 また、Table Store 行では、外部テーブル (ots_table_external) の作成中に指定された属性列のみが更新されます。 外部テーブルに表示されないデータ列は変更されません。
- MaxCompute 内のデータを一度に 4 MB を超えて OTS に書き込むことはできません。それ以外の場合は、サイズの大きすぎるデータを削除して書き戻す必要があります。
この時点でエラーが発生する可能性があります。
ODPS-0010000:System internal error - Output to TableStore failed with exception: TableStore BatchWrite request id XXXXX failed with error code OTSParameterInvalid and message:The total data size of BatchWriteRow request exceeds the limit
- データを一括で、またはブランチ単位で書き込むのは、1 回の操作です。 詳細は、「 BatchWriteRow」をご参照ください。 したがって、一括書き込みデータの量が大きすぎる場合は、ブランチ書き込みも可能です。
- データを一括で書き込む場合、重複する行がないことに注意してください。そうしないと、エラーが報告される可能性があります。
Errorcode: FIG, errormessage: the input parameter is invalid
詳細については、「BatchWriteRow を使用して一度に 100 個のデータを送信すると、OTSParameterInvalid エラーが報告される」をご参照ください。