全部產品
Search
文件中心

MaxCompute:UploadSession

更新時間:Feb 28, 2024

本文為您介紹UploadSession介面,此介面用於上傳資料到表中。

UploadSession介面定義

UploadSession介面定義如下。
public class UploadSession {
    UploadSession(Configuration conf, String projectName, String tableName,
                  String partitionSpec) throws TunnelException;
    UploadSession(Configuration conf, String projectName, String tableName, 
                  String partitionSpec, String uploadId) throws TunnelException;
    public void commit(Long[] blocks);
    public Long[] getBlockList();
    public String getId();
    public TableSchema getSchema();
    public UploadSession.Status getStatus();
    public Record newRecord();
    public RecordWriter openRecordWriter(long blockId);
    public RecordWriter openRecordWriter(long blockId, boolean compress);
    public RecordWriter openBufferedWriter();
    public RecordWriter openBufferedWriter(boolean compress);
}

UploadSession介面說明

  • 生命週期:從建立Upload執行個體到結束上傳。
  • 建立Upload執行個體:您可以通過調用構造方法和TableTunnel兩種方式進行建立。
    • 請求方式:同步。
    • Server端會為該Upload建立一個Session, 產生唯一UploadId標識該Upload,用戶端可以通過getId擷取。
  • 上傳資料
    • 請求方式:同步。
    • 調用openRecordWriter方法,產生RecordWriter執行個體,其中參數blockId用於標識此次上傳的資料,也描述了資料在整個表中的位置,取值範圍為[0,20000],當資料上傳失敗,可以根據blockId重新上傳。
  • 查看上傳
    • 請求方式:同步。
    • 調用getStatus可以擷取當前Upload狀態。
    • 調用getBlockList可以擷取成功上傳的blockid list,可以和上傳的blockid list對比,對失敗的blockId重新上傳。
  • 結束上傳
    • 請求方式:同步。
    • 調用commit(Long[] blocks)方法,參數blocks列表表示已經成功上傳的block列表,Server端會對該列表進行驗證。
    • 該功能是加強對資料正確性的校正,如果提供的block列表與Server端存在的block列表不一致拋出異常。
    • Commit失敗可以進行重試。
  • 六種狀態說明
    1. UNKNOWN:Server端剛建立一個Session時設定的初始值。
    2. NORMAL:建立Upload對象成功。
    3. CLOSING:當調用complete方法(結束上傳)時,服務端會先把狀態置為CLOSING。
    4. CLOSED:完成結束上傳(即把資料移動到結果表所在目錄)後。
    5. EXPIRED:上傳逾時。
    6. CRITICAL:服務出錯。
說明
  • 同一個Upload中Session的blockId不能重複。對於同一個UploadSession,用一個blockId開啟RecordWriter,寫入一批資料後,調用closeCommit完成後,不可以再用該blockId開啟另一個RecordWriter寫入資料。
  • 一個Block大小上限100GB,建議大於64M的資料。
  • 每個Session在服務端的生命週期為24小時。
  • 上傳資料時,Writer每寫入8KB資料,便會觸發一次網路動作,如果120秒內沒有網路動作,服務端將主動關閉串連,此時Writer將不可用,請重新開啟一個新的Writer寫入。
  • 建議使用openBufferedWriter介面上傳資料,該介面對您屏蔽了blockId的細節,並且內部帶有資料緩衝區,會自動進行失敗重試,詳情請參見BufferedWriter上傳樣本