MaxCompute の外部テーブル機能を使用すると、Object Storage Service (OSS) に保存されている CSV ファイルに対して直接 SQL クエリを実行できます。データ移行は不要です。MaxCompute は、大量の OSS データを数分で分析できるため、IoT ログやその他の大規模なテキストデータセットの構造化分析に適した低コストのオプションです。
このチュートリアルでは、以下について説明します。
前提条件
開始する前に、以下が準備できていることを確認してください。
OSS バケット。 詳細については、「バケットの作成」をご参照ください。
MaxCompute が OSS にアクセスするための権限が付与されていること。 Alibaba Cloud アカウントで RAM コンソールにログインし、「クラウドリソースアクセスの承認」ページに移動して、
AliyunODPSDefaultRoleロールを付与します。MaxCompute プロジェクト。 詳細については、「MaxCompute プロジェクトの作成」をご参照ください。
MaxCompute クライアントがインストールおよび設定されていること。 詳細については、「MaxCompute クライアントのインストールと設定」をご参照ください。
仕組み
ソースデータ (CSV ファイル) を OSS バケットにアップロードします。
MaxCompute で、これらのファイルを含む OSS ディレクトリにマッピングする外部テーブルを作成します。
LOCATION句は OSS 内のディレクトリを指し、テーブルがクエリされると、MaxCompute はそのディレクトリ内のすべてのファイルをスキャンします。外部テーブルに対して SQL クエリを実行します。 MaxCompute はクエリ時に OSS からデータを読み取ります。
外部テーブルを使用した OSS データのクエリ
以下の手順では、IoT 車両のサンプルデータセットを使用して、エンドツーエンドのプロセスを説明します。
ステップ 1:OSS へのデータのアップロード
ご利用のローカルコンピューターに、以下の内容で
vehicle.csvという名前のファイルを作成します。1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S 1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE 1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE 1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W 1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S 1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S 1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N 1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW 1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE 1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N各行には、
vehicleId、recordId、patientId、calls、locationLatitute、locationLongtitue、recordTime、directionの 8 つのカンマ区切りのフィールドが含まれています。vehicle.csvを中国 (杭州) リージョンのexamplebucketバケットのdemo/ディレクトリにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。
ステップ 2:MaxCompute クライアントの起動
MaxCompute クライアントを起動します。 詳細については、「MaxCompute クライアントの実行」をご参照ください。
ステップ 3:外部テーブルの作成
OSS の demo/ ディレクトリにマッピングする data_csv_external という名前の非パーティション化外部テーブルを作成します。
CREATE EXTERNAL TABLE IF NOT EXISTS data_csv_external
(
vehicleId int,
recordId int,
patientId int,
calls int,
locationLatitute double,
locationLongtitue double,
recordTime string,
direction string
)
STORED BY 'com.aliyun.odps.CsvStorageHandler'
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/examplebucket/demo/';ステップ 4:外部テーブルのクエリ
次の SQL ステートメントを実行して、patientId が 25 より大きいレコードを取得します。
select recordId, patientId, direction from data_csv_external where patientId > 25;想定される出力:
+------------+------------+-----------+
| recordId | patientId | direction |
+------------+------------+-----------+
| 1 | 51 | S |
| 3 | 48 | NE |
| 4 | 30 | W |
| 5 | 47 | S |
| 7 | 53 | N |
| 8 | 63 | SW |
| 10 | 31 | N |
+------------+------------+-----------+よくある質問
接続時に「You don't exist in project <projectname>」というエラーが表示される
使用されている AccessKey ペアの Alibaba Cloud アカウントまたは RAM ユーザーが MaxCompute プロジェクトに追加されていません。 プロジェクト所有者に連絡してアカウントを追加してください。 詳細については、「Alibaba Cloud アカウントの追加 (プロジェクトレベル)」および「RAM ユーザーの追加 (プロジェクトレベル)」をご参照ください。
完全なエラーコードは ODPS-0420095: Access Denied - Authorization Failed [4002] です。
次のステップ
他のファイル形式とテーブルタイプを試す:ORC などの他の形式にマッピングする OSS 外部テーブルを作成します。 詳細については、「OSS 外部テーブルの作成」をご参照ください。
クエリ結果のエクスポート:MaxCompute からローカルコンピューターにクエリ結果をダウンロードします。 詳細については、「SQL ステートメントの実行と結果データのエクスポート」をご参照ください。
リソースのクリーンアップ:不要な課金を避けるため、不要になった外部テーブルまたは MaxCompute プロジェクトを削除します。 詳細については、「テーブルまたは MaxCompute プロジェクトの削除」をご参照ください。