TableTunnel是訪問MaxCompute Tunnel服務的入口類,僅支持表數據(非視圖)的上傳和下載。
TableTunnel接口定義及說明
TableTunnel接口定義如下,詳情請參見Java-sdk-doc。
public class TableTunnel {
public DownloadSession createDownloadSession(String projectName, String tableName);
public DownloadSession createDownloadSession(String projectName, String tableName, PartitionSpec partitionSpec);
public UploadSession createUploadSession(String projectName, String tableName,boolean overwrite);
public UploadSession createUploadSession(String projectName, String tableName, PartitionSpec partitionSpec,boolean overwrite);
public DownloadSession getDownloadSession(String projectName, String tableName, PartitionSpec partitionSpec, String id);
public DownloadSession getDownloadSession(String projectName, String tableName, String id);
public UploadSession getUploadSession(String projectName, String tableName, PartitionSpec partitionSpec, String id);
public UploadSession getUploadSession(String projectName, String tableName, String id);
}
接口說明如下:
TableTunnel接口實現流程
RecordWriter.write()
將數據上傳到臨時目錄的文件。RecordWriter.close()
將相應的文件從臨時目錄移到數據目錄。session.commit()
將相應數據目錄下的所有文件移到相應表所在目錄,并更新表Meta,即數據進表。使數據對其它MaxCompute任務(例如SQL、MapReduce)可見。
TableTunnel接口限制
- Block ID的取值范圍是[0, 20000),單個Block上傳的數據限制為100GB。
- Session用Session ID來標識。Session的超時時間為24小時。如果大批量數據傳送導致超過24小時,需要自行拆分成多個Session。
- RecordWriter對應的HTTP Request超時時間為120s。如果120s內HTTP連接上沒有數據流過,服務端會主動關閉連接。
說明 HTTP本身還有8KB的緩存,因此并不是每次調用
RecordWriter.write()
都能保證HTTP連接上有數據流過。TunnelRecordWriter.flush()
可以將Buffer內數據強制刷出。 - 對于日志類寫入MaxCompute的場景,無法預測數據的到達時間會造成RecordWriter超時。因此:
- 不建議對每條數據打開一個RecordWriter。因為每個RecordWriter對應一個文件,此操作會造成小文件過多,嚴重影響MaxCompute后續使用性能。
- 建議用戶代碼Cache至少64MB的數據后,再使用一個RecordWriter進行一次性批量寫入。
- RecordReader的超時時間為300s。
- 如果用戶訪問的Endpoint是公網對應的地址,具體公網Endpoint地址請參見Endpoint,會產生下載費用,具體費用請參見下載費用 。
- 用戶使用公網Endpoint下載數據,如果已經開啟下載權限檢查,需要有Download數據對應的權限。具體授權明細請參見Download權限控制。