本文为您介绍如何通过PyODPS读取分区表数据。

前提条件

  1. 下载安装Python 2.7版本,并配置环境变量。
  2. 配置IntelliJ IDEA与MaxCompute Studio的Python集成环境,详情请参见Python开发使用须知
  3. 在命令窗口运行pip install pyodps,安装pyodps库。

操作步骤

  1. 准备数据
    1. 登录Dataworks控制台,以DDL模式创建分区表user_detail。

      代码如下。
      create table if not exists user_detail
      (
      userid    BIGINT comment '用户id',
      job       STRING comment '工作类型',
      education STRING comment '教育程度'
      ) comment '用户信息表'
      partitioned by (dt STRING comment '日期',region STRING comment '地区');
    2. DDL模式创建源数据表user_detail_ods。
      创建源数据表
      代码如下。
      create table if not exists user_detail_ods
      (
        userid    BIGINT comment '用户id',
        job       STRING comment '工作类型',
        education STRING comment '教育程度',
        dt STRING comment '日期',
        region STRING comment '地区'
      );
    3. 将以下测试数据保存为user_detail.txt文件。
      0001,互联网,本科,20190715,beijing
      0002,教育,大专,20190716,beijing
      0003,金融,硕士,20190715,shandong
      0004,互联网,硕士,20190715,beijing
    4. user_detail.txt中的数据导入到表user_detail_ods。
      数据导入
    5. 业务流程 > 数据开发中,新建ODPS SQL节点,并将节点命名为test。
      新建SQL节点
      test.sql代码如下。
      insert overwrite table user_detail partition (dt,region)
      select userid,job,education,dt,region from user_detail_ods;
    6. 单击运行按钮,将动态分区插入到分区表user_detail。
      数据插入
  2. 通过DataWorks读取分区表数据
    1. 业务流程 > 数据开发中,新建PyODPS节点,并将节点命名为读取分区表数据。
      新建节点
      代码如下。
      import sys
      from odps import ODPS
      reload(sys)
      print('dt=' + args['dt'])
      #修改系统默认编码。
      sys.setdefaultencoding('utf8')
      #个人信息凭证。
      t = o.get_table('user_detail')
      #获取分区表。
      print t.exist_partition('dt=20190715,region=beijing')
      #查看所有分区。
      for partition in t.partitions:
          print partition.name
      #您可以通过以下三种方式查询分区表数据。
      #第一种方式如下。
      with t.open_reader(partition='dt=20190715,region=beijing') as reader1:
          count = reader1.count
      print("第一种方式查询分区表数据:")
      for record in reader1:
          print record[0],record[1],record[2]
      #第二种方式如下。
      print("第二种方式查询分区表数据:")
      reader2 = t.open_reader(partition='dt=20190715,region=beijing')
      for record in reader2:
          print record["userid"],record["job"],record["education"]
      #第三种方式如下。
      print("第三种方式查询分表数据:")
      for record in o.read_table('user_detail', partition='dt=20190715,region=beijing'):
          print record["userid"],record["job"],record["education"]
    2. 调度配置窗口中,将参数设置为dt=20190715
      调度配置
    3. 单击运行按钮。
      单击运行
    4. 运行日志中查看运行结果。
      运行日志
  3. 通过MaxCompute Studio读取分区表数据
    1. 单击File > New > Project
      py文件
    2. 在弹出的New Project对话框中,勾选Python。单击Next
      选择Python
    3. Project Name设置为PythonPartition。单击Finish
      设置项目名称
    4. 右键单击scripts。再单击New > MaxCompte Python创建PythonThree.py文件。

      代码如下。
      # -*- coding: utf-8 -*-
      from odps import ODPS
      #个人信息凭证。
      o = ODPS('**your-access-id**','**your-secret-access-key**','**your-default-project**',endpoint='**your-end-point**')
      t = o.get_table('user_detail')
      #获取分区表。
      print t.exist_partition('dt=20190715,region=beijing')
      #查看所有分区。
      for partition in t.partitions:
          print partition.name
      #您可以通过以下三种方式查询分区表数据。
      #第一种方式如下。
      with t.open_reader(partition='dt=20190715,region=beijing') as reader1:
          count = reader1.count
      print("第一种方式查询分区表数据:")
      for record in reader1:
          print record[0],record[1],record[2]
      #第二种方式如下。
      print("第二种方式查询分区表数据:")
      reader2 = t.open_reader(partition='dt=20190715,region=beijing')
      for record in reader2:
          print record["userid"],record["job"],record["education"]
      #第三种方式如下。
      print("第三种方式查询分区表数据:")
      for record in o.read_table('user_detail', partition='dt=20190715,region=beijing'):
          print record["userid"],record["job"],record["education"]
    5. 查看运行结果。
      运行结果