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 操作可以重试,除非遇到以下异常:
| Modifier and Type | Method and Description |
|---|---|
void |
commit()
不进行校验的会话提交
|
void |
commit(Long[] blocks)
提交本次上传的所有数据块
|
Long |
getAvailBlockId()
多个线程中的
TunnelBufferedWriter 将通过这个接口获得写入的 blockId
为了防止 blockId 重复分配,对于 curBlockId 的访问必须加锁。 |
Long[] |
getBlockList()
获取当前会话已经上传成功的数据块列表
|
String |
getId()
获取会话ID
|
TableSchema |
getSchema()
获取表结构
|
TableTunnel.UploadStatus |
getStatus()
获取会话状态
|
boolean |
isShouldTransform() |
Record |
newRecord()
创建临时
Record对象 |
RecordPack |
newRecordPack() |
RecordPack |
newRecordPack(CompressOption option)
新建一个 ProtobufRecordPack,数据压缩方式 option
|
RecordPack |
newRecordPack(int capacity,
CompressOption option)
新建一个 ProtobufRecordPack,预设流 buffer 大小为 capacity, 数据压缩方式 option
|
RecordWriter |
openBufferedWriter()
打开一个无压缩
TunnelBufferedWriter 用来写入数据 |
RecordWriter |
openBufferedWriter(boolean compress)
打开
TunnelBufferedWriter 用来写入数据 |
RecordWriter |
openBufferedWriter(CompressOption compressOption)
打开
TunnelBufferedWriter 用来写入数据 |
RecordWriter |
openRecordWriter(long blockId)
打开
RecordWriter用来写入数据 |
RecordWriter |
openRecordWriter(long blockId,
boolean compress)
打开
RecordWriter用来写入数据 |
RecordWriter |
openRecordWriter(long blockId,
CompressOption compress)
打开
RecordWriter用来写入数据 |
void |
writeBlock(long blockId,
RecordPack pack)
打开http链接,写入pack数据,然后关闭链接,多次向同一个block写入时会覆盖之前数据
|
public boolean isShouldTransform()
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, 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(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(CompressOption option) throws IOException
option - IOExceptionpublic RecordPack newRecordPack(int capacity, CompressOption option) throws IOException
capacity - option - IOExceptionpublic Long[] getBlockList() throws TunnelException, IOException
TunnelExceptionIOExceptionCopyright © 2019 Alibaba Cloud Computing. All rights reserved.