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 操作可以重试,除非遇到以下异常:
public Long getAvailBlockId()
TunnelBufferedWriter 将通过这个接口获得写入的 blockId
为了防止 blockId 重复分配,对于 curBlockId 的访问必须加锁。TunnelExceptionpublic void commit()
throws TunnelException,
IOException
TunnelExceptionIOExceptionpublic void writeBlock(long blockId,
RecordPack pack)
throws IOException
blockId - 块标识pack - pack数据IOExceptionpublic 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 RecordWriter openBufferedWriter() throws TunnelException
TunnelBufferedWriter 用来写入数据TunnelExceptionpublic RecordWriter openBufferedWriter(boolean compress) throws TunnelException
TunnelBufferedWriter 用来写入数据compress - 数据传输是否进行压缩TunnelExceptionpublic RecordWriter openBufferedWriter(com.aliyun.odps.tunnel.io.CompressOption compressOption) throws TunnelException
TunnelBufferedWriter 用来写入数据compressOption - 数据传输压缩选项TunnelExceptionpublic 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
TunnelExceptionIOExceptionpublic Record newRecord()
public RecordPack newRecordPack() throws IOException
IOExceptionpublic RecordPack newRecordPack(com.aliyun.odps.tunnel.io.CompressOption option) throws IOException
IOExceptionpublic Long[] getBlockList() throws TunnelException, IOException
TunnelExceptionIOExceptionCopyright © 2016 Alibaba Cloud Computing. All rights reserved.