本文为您介绍如何在MaxCompute上建立数据表,用于存储原始数据及加工后的数据。

前提条件

  • 已开通MaxCompute服务并创建DataWorks工作空间(本教程使用为简单模式工作空间),详情请参见环境准备
  • 已具备访问Tablestore数据的权限。当MaxCompute和Tablestore的所有者是同一个账号时,您可以单击此处一键授权。如果不是,您可以自定义授权,详情请参见OTS外部表

操作步骤

  1. 进入DataWorks数据开发界面。
    1. 进入DataWorks工作空间列表,选择区域为华东2(上海)
    2. 单击已创建好的工作空间后的数据开发,进入工作空间的数据开发界面。
  2. 新建业务流程。
    1. 右键单击业务流程,选择新建业务流程
      新建业务流程
    2. 填写业务名称描述,单击新建。本教程中,业务流程名为Workshop。
  3. 新建数据表。
    1. 创建外部表ots_user_trace_log。
      重要 创建外部表时, 暂时不支持在向导模式下使用DDL方式创建。您可以在向导模式下手动添加外部表字段进行表配置,或创建一个MaxCompute的ODPS SQL节点,在ODPS SQL节点中使用DDL语句创建外部表。以下以使用ODPS SQL节点的DDL语句创建外部表作为操作示例。
      1. 单击新建的业务流程Workshop,右键单击MaxCompute,选择新建 > ODPS SQL,输入节点名称workshop单击提交
      2. 双击创建的ODPS节点,进入数据开发界面后,编译如下DDL语句,用于创建名称为ots_user_trace_log的外部表。
        外部表ots_user_trace_log的建表语句如下。
        CREATE EXTERNAL TABLE ots_user_trace_log (
            md5 string COMMENT '用户uid的md5值前8位',
            uid string COMMENT '用户uid',
            ts bigint COMMENT '用户操作时间戳',
            ip string COMMENT 'ip地址',
            status bigint COMMENT '服务器返回状态码',
            bytes bigint COMMENT '返回给客户端的字节数',
            device string COMMENT '终端型号',
            system string COMMENT '系统版本ios xxx/android xxx',
            customize_event string COMMENT '自定义事件:登录/退出/购买/注册/点击/后台/切换用户/浏览/评论',
            use_time bigint COMMENT 'APP单次使用时长,当事件为退出、后台、切换用户时有该项',
            customize_event_content string COMMENT '用户关注内容信息,在customize_event为浏览和评论时,包含该列'
        )
        STORED BY 'com.aliyun.odps.TableStoreStorageHandler'
        WITH SERDEPROPERTIES (
            'tablestore.columns.mapping'=':md5,:uid,:ts, ip,status,bytes,device,system,customize_event,use_time,customize_event_content',
            'tablestore.table.name'='user_trace_log'
        )
        LOCATION 'tablestore://workshop-bj-001.cn-beijing.ots.aliyuncs.com/';
        • STORED BY:必选参数,值为com.aliyun.odps.TableStoreStorageHandler,是MaxCompute内置处理Tablestore数据的StorageHandler,定义了MaxCompute和Tablestore的交互。
        • SERDEPROPERITES:必选参数,是提供参数选项的接口,在使用TableStoreStorageHandler时,以下选项必须指定:
          • tablestore.columns.mapping:用于描述MaxCompute将访问的Tablestore表的列,包括主键和属性列。
            说明
            • 以冒号(:)开头的参数值为Tablestore主键,例如示例中的:md5:uid:ts,其它参数值均为属性列。
            • 在指定映射时,您必须提供指定Tablestore表的所有主键,只需提供需要通过MaxCompute访问的属性列。提供的属性列必须是Tablestore表的列,否则即使外表可以创建成功,查询时也会报错。
          • tablestore.table.name:需要访问的Tablestore表名。如果指定的Tablestore表名错误(不存在),则会报错,MaxCompute不会主动创建Tablestore表。
        • LOCATION:用来指定Tablestore的访问地址。请您根据环境准备,将自己的表格存储实例访问地址参数填写在此。
          说明 如果您使用公网地址LOCATION 'tablestore://workshop-bj-001.cn-beijing.ots.aliyuncs.com/'报错,显示网络不同,可尝试更换为经典网地址LOCATION 'tablestore://workshop-bj-001.cn-beijing.ots-internal.aliyuncs.com/'
      3. 单击保存图标后,单击运行图标。
        当运行日志显示运行成功后,外部表即已创建成功。
        说明 首次单击运行时,需要选择调度资源组调度资源组使用场景以及使用方式,详情请参见DataWorks资源组概述
    2. 创建ods_user_trace_log表。
      建表方法同上,建表语句如下。ods_user_trace_log为ODS层表,相关数仓模型定义请参见数据引入层(ODS)
      CREATE TABLE IF NOT EXISTS ods_user_trace_log (
          md5 STRING COMMENT '用户uid的md5值前8位',
          uid STRING COMMENT '用户uid',
          ts BIGINT COMMENT '用户操作时间戳',
          ip STRING COMMENT 'ip地址',
          status BIGINT COMMENT '服务器返回状态码',
          bytes BIGINT COMMENT '返回给客户端的字节数',
          device STRING COMMENT '终端型号',
          system STRING COMMENT '系统版本ios xxx/android xxx',
          customize_event STRING COMMENT '自定义事件:登录/退出/购买/注册/点击/后台/切换用户/浏览/评论',
          use_time BIGINT COMMENT 'APP单次使用时长,当事件为退出、后台、切换用户时有该项',
          customize_event_content STRING COMMENT '用户关注内容信息,在customize_event为浏览和评论时,包含该列'
      )
      PARTITIONED BY (
          dt STRING
      );
    3. 创建dw_user_trace_log表。
      建表方法同上,建表语句如下。dw_user_trace_log为DW层表,相关数仓模型定义请参见明细粒度事实层(DWD)
      CREATE TABLE IF NOT EXISTS dw_user_trace_log (
          uid STRING COMMENT '用户uid',
          region STRING COMMENT '地域,根据ip得到',
          device_brand string comment '设备品牌',
          device STRING COMMENT '终端型号',
          system_type STRING COMMENT '系统类型,Android、IOS、ipad、Windows_phone',
          customize_event STRING COMMENT '自定义事件:登录/退出/购买/注册/点击/后台/切换用户/浏览/评论',
          use_time BIGINT COMMENT 'APP单次使用时长,当事件为退出、后台、切换用户时有该项',
          customize_event_content STRING COMMENT '用户关注内容信息,在customize_event为浏览和评论时,包含该列'
      )
      PARTITIONED BY (
          dt STRING
      );
    4. 创建rpt_user_trace_log表。
      建表方法同上,建表语句如下。rpt_user_trace_log为ADS层表,相关数仓模型定义请参见数仓分层
      CREATE TABLE IF NOT EXISTS rpt_user_trace_log (
          country STRING COMMENT '国家',
          province STRING COMMENT '省份',
          city STRING COMMENT '城市',
          device_brand string comment '设备品牌',
          device STRING COMMENT '终端型号',
          system_type STRING COMMENT '系统类型,Android、IOS、ipad、Windows_phone',
          customize_event STRING COMMENT '自定义事件:登录/退出/购买/注册/点击/后台/切换用户/浏览/评论',
          use_time BIGINT COMMENT 'APP单次使用时长,当事件为退出、后台、切换用户时有该项',
          customize_event_content STRING COMMENT '用户关注内容信息,在customize_event为浏览和评论时,包含该列',
          pv bigint comment '浏览量',
          uv bigint comment '独立访客'
      )
      PARTITIONED BY (
          dt STRING
      );
    5. (可选)如果您使用的是标准模式,上述步骤创建的外部表仅提交到了开发环境,您需根据以下步骤,依次将所有创建的外部表提交到生产环境。
      1. 单击MaxCompute下的表,右键选择导入表。导入表
      2. 在导入表弹窗中选择上述创建的开发环境外部表,单击确认
        说明 鼠标悬浮在表名上即可在表名后看到该表是生产环境的表还是开发环境的表。如果误选了生产环境的表,会提示您表不存在。
      3. 双击导入的外部表,单击提交到生产环境
  4. 验证建表结果。
    1. 完成建表后,您可以在Workshop业务流程MaxCompute > 下看到新建的4张表。
    2. 右键单击业务流程中MaxCompute下的数据开发,选择新建 > ODPS SQL
    3. 新建节点页面,输入节点名称,单击提交新建ODPS SQL节点。
    4. 在新建的ODPS SQL节点中输入如下SQL语句,单击运行图标。
      DESCRIBE ots_user_trace_log;
      DESCRIBE ods_user_trace_log;
      DESCRIBE dw_user_trace_log;
      DESCRIBE rpt_user_trace_log;
      返回表的结构信息如下:验证结果