全部產品
Search
文件中心

MaxCompute:大量資料匯出方案

更新時間:Jun 19, 2024

本文將通過樣本,為您介紹匯出MaxCompute SQL計算結果的方法。

說明

本文中所有SDK部分僅以Java舉例。

概述

您可以通過以下方法匯出SQL的運行結果:

  • 如果資料比較少,請使用SQL Task得到全部的查詢結果。

  • 如果需要匯出某個表或者分區,請使用Tunnel直接匯出查詢結果。

  • 如果SQL比較複雜,請使用Tunnel和SQL相互配合匯出查詢結果。

  • DataWorks 可以方便地幫您運行SQL,同步資料,並支援定時調度,配置任務依賴的功能。

  • 開源工具DataX可以協助您方便地把MaxCompute中的資料匯出到目標資料來源。

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並配置資料同步任務,以完成資料產生和匯出需求。

  1. 登入DataWorks控制台

  2. 在左側導覽列,單擊工作空間列表

  3. 單擊相應工作空間操作列的快速進入 > 資料開發

  4. 建立商務程序。

    1. 按右鍵商務程序,選擇建立商務程序

    2. 輸入業務名稱

    3. 單擊建立

  5. 建立SQL節點。

    1. 按右鍵商務程序,選擇建立節點 > MaxCompute > ODPS SQL

    2. 填寫節點名稱runsql,單擊確認

    3. 配置ODPS SQL節點,配置完成後單擊儲存

  6. 建立資料同步節點。

    1. 按右鍵商務程序,選擇建立節點 > Data Integration > 離線同步

    2. 填寫節點名稱sync2mysql,單擊確認

    3. 選擇資料來源以及去向。

    4. 配置欄位對應。

    5. 配置通道控制。

    6. 單擊儲存

  7. 將資料同步節點和ODPS SQL節點連線配置成依賴關係,ODPS SQL節點作為資料的產出節點,資料同步節點作為資料的匯出節點。

  8. 工作流程調度配置完成後(可以直接使用預設配置),單擊運行。資料同步的作業記錄,如下所示。

    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
  9. 執行如下SQL語句查看資料同步的結果。

    select count(*) from result_in_db;