データセットのサイズと複雑さに応じて、SQLTask、Tunnel、または DataWorks のいずれかを選択し、MaxCompute SQL クエリの結果をエクスポートします。
すべての SDK の例は Java を使用しています。
概要
SQLTask の使用
SQLTask SDK は MaxCompute SQL インターフェイスを呼び出します。SQLTask.getResult(i) を呼び出してクエリを実行し、結果を取得します。
注意事項:
-
SQLTask.getResult(i) は SELECT クエリの結果のみをエクスポートします。show tables などの他のコマンドはサポートしていません。
-
READ_TABLE_MAX_ROW プロパティは、SELECT 文が返すレコード数を制御します。このプロパティは プロジェクト操作 で設定します。
-
SELECT 文はクライアントに対して最大 10,000 レコードを返します。クライアント上で SELECT 文を実行する(SQLTask 経由を含む)ことは、
LIMIT Nを末尾に追加することと同等です。
Tunnel の使用
Tunnel コマンドラインツール または Tunnel SDK を使用して、テーブル全体または特定のパーティションをエクスポートします。
以下の例では、Tunnel コマンドを使用してデータをエクスポートしています。CLI でサポートされていない SDK ベースのシナリオについては、「バッチデータチャネルの概要」をご参照ください。
tunnel d wc_out c:\wc_out.dat;
2016-12-16 19:32:08 - new session: 201612161932082d3c9b0a012f68e7 total lines: 3
2016-12-16 19:32:08 - file [0]: [0, 3), c:\wc_out.dat
downloading 3 records into 1 file
2016-12-16 19:32:08 - file [0] start
2016-12-16 19:32:08 - file [0] OK. total: 21 bytes
download OK
SQLTask と Tunnel の組み合わせ
SQLTask は最大 10,000 レコードまでしか返しませんが、Tunnel にはそのような制限がありません。両者を組み合わせることで、より大規模なデータセットをエクスポートできます。
例:
Odps odps = OdpsUtils.newDefaultOdps(); // Odps オブジェクトを初期化します。
Instance i = SQLTask.run(odps, "select * from wc_in;");
i.waitForSuccess();
// InstanceTunnel を作成します。
InstanceTunnel tunnel = new InstanceTunnel(odps);
// インスタンス ID を基に DownloadSession を作成します。
InstanceTunnel.DownloadSession session = tunnel.createDownloadSession(odps.getDefaultProject(), i.getId());
long count = session.getRecordCount();
// レコード数を出力します。
System.out.println(count);
// データ取得の方法は TableTunnel と同じです。
TunnelRecordReader reader = session.openRecordReader(0, count);
Record record;
while((record = reader.read()) != null)
{
for(int col = 0; col < session.getSchema().getColumns().size(); ++col)
{
// wc_in テーブルのカラムはすべて STRING 型です。直接出力するか、ローカルファイルに書き込むことができます。
System.out.println(record.get(col));
}
}
reader.close();
DataWorks データ同期の使用
この例では DataWorks 基本モードを使用しており、パブリックプレビュー中のワークスペースには適用されません。ワークスペースを作成する際は、Join The Public Preview Of DataStudio を選択しないでください。
DataWorks を使用して SQL クエリを実行し、データ同期タスクを設定します。
-
DataWorks コンソールにログインします。
-
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。
-
対象のワークスペースの [操作] 列で、[ショートカット] > データ開発 を選択します。
-
ワークフローを作成します。
-
[ビジネスフロー] を右クリックし、[ワークフローの作成] を選択します。
-
[名前] を入力します。
-
[作成] をクリックします。
-
-
SQL ノードを作成します。
-
ワークフローを右クリックし、 を選択します。
-
[名前] に runsql を設定し、[OK] をクリックします。
-
ODPS SQL ノードを設定し、[保存] をクリックします。
-
-
データ同期ノードを作成します。
-
ワークフローを右クリックし、 を選択します。
-
[名前] に sync2mysql を設定し、[OK] をクリックします。
-
データソースと送信先を選択します。
-
フィールドマッピングを設定します。
-
チャンネルコントロールを設定します。
-
[保存] をクリックします。
-
-
ODPS SQL ノードをデータ同期ノードに接続し、SQL ノードが同期ノードがエクスポートするデータを生成するようにします。
-
ワークフロースケジューリングを設定するかデフォルトを使用し、[実行] をクリックします。実行ログの例:
2016-12-17 23:43:46.394 [job-15598025] INFO JobContainer - Task start time : 2016-12-17 23:43:34 Task end time : 2016-12-17 23:43:46 Total time consumed : 11s Average traffic : 31.36KB/s Record write speed : 1668rec/s Total records read : 16689 Total read/write failures : 0 -
同期結果を確認します:
select count(*) from result_in_db;