public class TableTunnel.UploadSession extends Object
UploadSession 表示向ODPS表中上传数据的会话,一般通过TableTunnel来创建。
上传 Session 是 INSERT INTO 语义,即对同一张表或 partition 的多个/多次上传 Session 互不影响。
Session ID 是Session的唯一标识符,可通过 getId() 获取。
UploadSession 通过创建 RecordWriter 来完成数据的写入操作。
每个 RecordWriter 对应一个 HTTP Request,单个 UploadSession 可创建多个RecordWriter。
创建 RecordWriter 时需指定 block ID,block ID是 RecordWriter 的唯一标识符,取值范围 [0, 20000),单个block上传的数据限制是 100G。
同一 UploadSession 中,使用同一 block ID 多次打开 RecordWriter 会导致覆盖行为,最后一个调用 close() 的 RecordWriter 所上传的数据会被保留。同一RecordWriter实例不能重复调用 close().
RecordWriter 对应的 HTTP Request超时为 120s,若 120s 内没有数据传输,service 端会主动关闭连接。特别提醒,HTTP协议本身有8K buffer。
最后调用 commit(Long[]) 来提交本次上传的所有数据块。
commit 操作可以重试,除非遇到以下异常:
| 限定符和类型 | 方法和说明 |
|---|---|
void |
commit(Long[] blocks)
提交本次上传的所有数据块
blcoks表示用户记录的已经成功上传的数据块列表,用来与服务器端做完整性校验
|
Long[] |
getBlockList()
获取当前会话已经上传成功的数据块列表
|
String |
getId()
获取会话ID
|
TableSchema |
getSchema()
获取表结构
|
TableTunnel.UploadStatus |
getStatus()
获取会话状态
|
Record |
newRecord()
|
RecordWriter |
openRecordWriter(long blockId)
打开
RecordWriter用来写入数据
BlockId是由用户选取的0~19999之间的数值,标识本次上传数据块
|
RecordWriter |
openRecordWriter(long blockId,
boolean compress)
打开
RecordWriter用来写入数据 |
RecordWriter |
openRecordWriter(long blockId,
com.aliyun.odps.tunnel.io.CompressOption compress)
打开
RecordWriter用来写入数据 |
public RecordWriter openRecordWriter(long blockId) throws TunnelException, IOException
RecordWriter用来写入数据
BlockId是由用户选取的0~19999之间的数值,标识本次上传数据块
blockId - 块标识TunnelExceptionIOExceptionpublic RecordWriter openRecordWriter(long blockId, boolean compress) throws TunnelException, IOException
RecordWriter用来写入数据blockId - 块标识compress - 数据传输是否进行压缩TunnelExceptionIOExceptionpublic RecordWriter openRecordWriter(long blockId, com.aliyun.odps.tunnel.io.CompressOption compress) throws TunnelException, IOException
RecordWriter用来写入数据blockId - 块标识compress - 数据传输是否进行压缩TunnelExceptionIOExceptionpublic void commit(Long[] blocks) throws TunnelException, IOException
blcoks表示用户记录的已经成功上传的数据块列表,用来与服务器端做完整性校验
blocks - 用户预期已经上传成功的数据块列表TunnelException - 如果提供的Block列表与Server端存在的Block不一致抛出异常IOExceptionpublic String getId()
public TableSchema getSchema()
public TableTunnel.UploadStatus getStatus() throws TunnelException, IOException
public Record newRecord()
public Long[] getBlockList() throws TunnelException, IOException
Copyright © 2015 Alibaba Cloud Computing. All rights reserved.