开发者社区 问答 正文

MaxCompute用户指南:数据上传下载:批量数据通道SDK介绍:DownloadSession



接口定义如下:

  1.     public class DownloadSession {
  2.         DownloadSession(Configuration conf, String projectName, String tableName,
  3.             String partitionSpec) throws TunnelException
  4.         DownloadSession(Configuration conf, String projectName, String tableName,
  5.             String partitionSpec, String downloadId) throws TunnelException
  6.         public String getId()
  7.         public long getRecordCount()
  8.         public TableSchema getSchema()
  9.         public DownloadSession.Status getStatus()
  10.         public RecordReader openRecordReader(long start, long count)
  11.         public RecordReader openRecordReader(long start, long count, boolean compress)
  12.     }

Download 对象:

  • 生命周期:从创建 Download 实例到下载结束。

  • 创建 Download 实例:您可以通过 调用构造方法 和 TableTunnel 两种方式进行创建。
    请求方式:同步。

  • Server 端会为该 Download 创建一个 Session,生成唯一 DownloadId 标识该 Download,客户端可以通过 getId 获取。

  • 该操作开销较大,Server 端会对数据文件创建索引,当文件数很多时,该时间会比较长。

  • 同时 Server 端会返回总 Record 数,可以根据总 Record 数启动多个并发同时下载。

下载数据:
  • 请求方式:异步。
  • 调用 openRecordReader 方法,生成 RecordReader 实例,其中参数 start 标识本次下载的 Record 的起始位置,从 0 开始,取值范围是 >= 0, count 标识本次下载的记录数,取值范围是 >0。

查看下载:

  • 请求方式:同步。

  • 调用 getStatus,可以获取当前 Download 状态。

4 种状态说明:

  • UNKNOWN:Server 端刚创建一个 Session 时设置的初始值。

  • NORMAL:创建 Download 对象成功。

  • CLOSED:下载结束后。

  • EXPIRED:下载超时。

展开
收起
行者武松 2017-10-23 15:31:31 2095 分享 版权
阿里云 AI 助理回答

这段描述是关于阿里云DataWorks(原Data IDE)中数据集成(Data Integration)服务的Tunnel SDK使用方法,特别是针对下载数据到本地的操作。下面我将根据提供的信息,帮助您理解如何使用这个接口进行数据下载。

创建 DownloadSession 实例

  1. 通过构造方法创建:

    Configuration conf = ...; // 配置对象,包含访问DataWorks所需的各种参数,如Endpoint、AccessKeyId等
    String projectName = "your_project_name"; // 数据集成项目名称
    String tableName = "your_table_name"; // 要下载数据的表名
    String partitionSpec = "your_partition_spec"; // 分区信息,如有需要
    String downloadId = null; // 可选,如果已知DownloadId,则提供,否则留空
    
    // 方式一:不指定downloadId
    DownloadSession session1;
    try {
       session1 = new DownloadSession(conf, projectName, tableName, partitionSpec);
    } catch (TunnelException e) {
       // 处理异常
    }
    
    // 方式二:指定downloadId
    DownloadSession session2;
    try {
       session2 = new DownloadSession(conf, projectName, tableName, partitionSpec, downloadId);
    } catch (TunnelException e) {
       // 处理异常
    }
    

下载数据

  • 在成功创建了DownloadSession实例后,您可以调用openRecordReader方法来开始异步下载数据。

    long start = 0; // 下载起始位置,默认从第一条记录开始
    long count = 1000; // 每次下载的记录数
    boolean compress = false; // 是否压缩数据,默认不压缩
    
    RecordReader reader;
    try {
      reader = session.openRecordReader(start, count, compress);
    } catch (TunnelException e) {
      // 处理异常
    }
    
    // 使用reader读取数据,具体实现取决于RecordReader的API
    

查看下载状态

  • 使用getStatus方法可以同步获取当前下载的状态。

    DownloadSession.Status status = session.getStatus();
    switch (status) {
      case UNKNOWN:
          System.out.println("Session刚创建,状态未知");
          break;
      case NORMAL:
          System.out.println("下载对象创建成功");
          break;
      case CLOSED:
          System.out.println("下载结束");
          break;
      case EXPIRED:
          System.out.println("下载超时");
          break;
      default:
          System.out.println("未知状态");
    }
    

注意事项

  • getId()方法用于获取唯一标识该下载任务的DownloadId。
  • getRecordCount()getSchema()分别用于获取总记录数和表结构信息,这些可以在规划下载策略时使用。
  • 下载操作是基于Record的,因此在设计并发下载策略时,需合理设置startcount参数以避免数据冲突或遗漏。
  • 异常处理是关键,确保对TunnelException等异常进行妥善处理,以便于问题排查和重试机制的实施。

以上就是基于阿里云DataWorks数据集成服务Tunnel SDK进行数据下载的基本流程和注意事项。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答