Tunnel 下载
TableTunnel 是 MaxCompute 的标准数据通道,适用于大批量数据的导出场 景。支持压缩传输、多线程并行下载,无行数限制。
前置条件
- 已初始化
Odps客户端对象 - 添加
odps-sdk-tunnel模块依赖 - 对目标表具有读取权限
- SDK 版本 >= 0.48.0
完整示例
- Java
- Python
- Go
import com.aliyun.odps.Odps;
import com.aliyun.odps.PartitionSpec;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.tunnel.TableTunnel;
import com.aliyun.odps.tunnel.TableTunnel.DownloadSession;
import com.aliyun.odps.tunnel.io.CompressOption;
import com.aliyun.odps.tunnel.io.TunnelRecordReader;
public class TunnelDownloadExample {
public static void main(String[] args) throws Exception {
// 假设 odps 客户端已初始化
Odps odps = getOdpsClient();
// 1. 创建 TableTunnel 对象
TableTunnel tunnel = new TableTunnel(odps);
// 2. 创建 DownloadSession
DownloadSession session = tunnel.buildDownloadSession()
.setProjectName("my_project")
.setTableName("user_behavior")
.setPartitionSpec(new PartitionSpec("dt=20250101"))
.build();
// 3. 获取总行数
long totalRecords = session.getRecordCount();
System.out.println("总记录数: " + totalRecords);
// 4. 打开 Reader 并读取数据
try (TunnelRecordReader reader = session.openRecordReader(0, totalRecords)) {
while (reader.hasNext()) {
Record record = reader.next();
System.out.println("user_id=" + record.get("user_id")
+ ", action=" + record.get("action"));
}
}
}
}