本文將通過樣本,為您介紹匯出MaxCompute SQL計算結果的方法。
本文中所有SDK部分僅以Java舉例。
概述
SQLTask方式匯出
SQLTask使用SDK方法,直接調用MaxCompute SQL的介面SQLTask.getResult(i),可以很方便地運行SQL並獲得其返回結果。使用方法請參見SQLTask。
使用SQLTask時,請注意:
SQLTask.getResult(i)用於匯出SELECT查詢結果,不適用於匯出show tables等其他MaxCompute命令操作結果。
SELECT語句返回給用戶端的資料條數可以通過READ_TABLE_MAX_ROW進行設定,詳情請參見專案空間操作。
SELECT語句最多返回1萬條資料至用戶端。即如果在用戶端(包括SQLTask)直接執行SELECT語句,相當於在SELECT語句最後加了Limit N。
Tunnel方式匯出
如果您需要匯出的查詢結果是某張表的全部內容(或者是具體的某個分區的全部內容),可以通過Tunnel來實現,詳情請參見命令列工具 和基於SDK編寫的Tunnel SDK。
此處提供一個Tunnel命令列匯出資料的簡單樣本,Tunnel SDK的編寫適用於Tunnel命令列無法支援的情境,詳情請參見批量資料通道概述。
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不能處理超過1萬條資料,而Tunnel方式可以,兩者可以互補,因此可以基於兩者實現超過1萬條資料的匯出。
代碼實現的樣本如下。
Odps odps = OdpsUtils.newDefaultOdps(); // 初始化Odps對象。
Instance i = SQLTask.run(odps, "select * from wc_in;");
i.waitForSuccess();
//建立InstanceTunnel。
InstanceTunnel tunnel = new InstanceTunnel(odps);
//根據instance 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支援運行SQL並配置資料同步任務,以完成資料產生和匯出需求。
登入DataWorks控制台。
在左側導覽列,單擊工作空間列表。
單擊相應工作空間操作列的快速進入 > 資料開發。
建立商務程序。
按右鍵商務程序,選擇建立商務程序
輸入業務名稱。
單擊建立。
建立SQL節點。
按右鍵商務程序,選擇
。填寫節點名稱為runsql,單擊確認。
配置ODPS SQL節點,配置完成後單擊儲存。
建立資料同步節點。
按右鍵商務程序,選擇
。填寫節點名稱為sync2mysql,單擊確認。
選擇資料來源以及去向。
配置欄位對應。
配置通道控制。
單擊儲存。
將資料同步節點和ODPS SQL節點連線配置成依賴關係,ODPS SQL節點作為資料的產出節點,資料同步節點作為資料的匯出節點。
工作流程調度配置完成後(可以直接使用預設配置),單擊運行。資料同步的作業記錄,如下所示。
2016-12-17 23:43:46.394 [job-15598025] INFO JobContainer - 任務啟動時刻 : 2016-12-17 23:43:34 任務結束時刻 : 2016-12-17 23:43:46 任務總計耗時 : 11s 任務平均流量 : 31.36KB/s 記錄寫入速度 : 1668rec/s 讀出記錄總數 : 16689 讀寫失敗總數 : 0
執行如下SQL語句查看資料同步的結果。
select count(*) from result_in_db;