全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
表格存储

使用MaxCompute访问表格存储

更新时间:2017-12-25 14:34:41

背景信息

本文介绍如何在同一个云账号下实现表格存储和 MaxCompute 之间的无缝连接。

MaxCompute 是一项大数据计算服务,它能提供快速、完全托管的 PB 级数据仓库解决方案,使您可以经济并高效地分析处理海量数据。您只需通过一条简单的 DDL 语句,即可在 MaxCompute 上创建一张外部表,建立 MaxCompute 表与外部数据源的关联,提供各种数据的接入和输出能力。MaxCompute 表是结构化的数据,而外部表可以不限于结构化数据。

表格存储与 MaxCompute 都有其自身的类型系统,两者之间的类型对应关系如下表所示。

Table Store MaxCompute
STRING STRING
INTEGER BIGINT
DOUBLE DOUBLE
BOOLEAN BOOLEAN
BINARY BINARY

准备工作

使用 MaxCompute 访问表格存储前,您需要完成以下准备工作:

  1. 开通 MaxCompute 服务

  2. 创建 MaxCompute 项目

  3. 创建 AccessKey

  4. 在 RAM 控制台授权 MaxCompute 访问表格存储的权限。

    1. 登录 RAM 控制台

    2. 角色管理页面,创建用户角色 AliyunODPSDefaultRole

      创建用户角色

    3. 角色详情页面,设置策略内容。

      设置角色策略内容

      策略内容:

      1. {
      2. "Statement": [
      3. {
      4. "Action": "sts:AssumeRole",
      5. "Effect": "Allow",
      6. "Principal": {
      7. "Service": [
      8. "odps.aliyuncs.com"
      9. ]
      10. }
      11. }
      12. ],
      13. "Version": "1"
      14. }
    4. 策略管理页面,新建授权策略 AliyunODPSRolePolicy

      新建授权策略

      策略内容:

      1. {
      2. "Version": "1",
      3. "Statement": [
      4. {
      5. "Action": [
      6. "ots:ListTable",
      7. "ots:DescribeTable",
      8. "ots:GetRow",
      9. "ots:PutRow",
      10. "ots:UpdateRow",
      11. "ots:DeleteRow",
      12. "ots:GetRange",
      13. "ots:BatchGetRow",
      14. "ots:BatchWriteRow",
      15. "ots:ComputeSplitPointsBySize"
      16. ],
      17. "Resource": "*",
      18. "Effect": "Allow"
      19. }
      20. ]
      21. }
      22. --还可自定义其他权限
    5. 角色管理页面,将 AliyunODPSRolePolicy 权限授权给 AliyunODPSDefaultRole 角色。

      授权

  5. 在表格存储控制台创建实例创建数据表

    在本示例中,创建的表格存储实例和数据表信息如下:

    • 实例名称:cap1
    • 数据表名称:vehicle_track
    • 主键信息:vid (integer),gt (integer)
    • 访问域名:https://cap1.cn-hangzhou.ots-internal.aliyuncs.com

      说明:使用 MaxCompute 访问表格存储时,建议使用表格存储的私网地址。

    • 设置实例网络类型允许任意网络访问

      实例网络类型

步骤 1. 安装并配置客户端

  1. 下载 MaxCompute 客户端并解压。

    说明:确保您的机器上已安装 JRE 1.7或以上版本。

  2. 编辑 conf/odps_config.ini 文件,对客户端进行配置,如下所示:

    1. access_id=*******************
    2. access_key=*********************
    3. # Accesss ID 及 Access Key 是用户的云账号信息,可登录阿里云官网,进入管理控制台 — accesskeys 页面进行查看。
    4. project_name=my_project
    5. # 指定用户想进入的项目空间。
    6. end_point=https://service.odps.aliyun.com/api
    7. # MaxCompute 服务的访问链接
    8. tunnel_endpoint=https://dt.odps.aliyun.com
    9. # MaxCompute Tunnel 服务的访问链接
    10. log_view_host=http://logview.odps.aliyun.com
    11. # 当用户执行一个作业后,客户端会返回该作业的 LogView 地址。打开该地址将会看到作业执行的详细信息
    12. https_check=true
    13. #决定是否开启 HTTPS 访问

    说明:odps_config.ini 文件中使用#作为注释,MaxCompute 客户端内使用--作为注释。

  3. 运行 bin/odpscmd.bat,输入 show tables;

    如果显示当前 MaxCompute 项目中的表,则表述上述配置正确。

    运行odpscmd

步骤 2. 创建外部表

创建一张 MaxCompute 的数据表(ots_vehicle_track)关联到 Table Store 的某一张表(vehicle_track)。

关联的数据表信息如下:

  • 实例名称:cap1
  • 数据表名称:vehicle_track
  • 主键信息:vid (int); gt (int)
  • 访问域名:https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
  1. CREATE EXTERNAL TABLE IF NOT EXISTS ots_vehicle_track
  2. (
  3. vid bigint,
  4. gt bigint,
  5. longitude double,
  6. latitude double,
  7. distance double ,
  8. speed double,
  9. oil_consumption double
  10. )
  11. STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)
  12. WITH SERDEPROPERTIES ( -- (2)
  13. 'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption', -- (3)
  14. 'tablestore.table.name'='vehicle_track' -- (4)
  15. )
  16. LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'; -- (5)

参数说明如下:

标号 参数 说明
(1) com.aliyun.odps.TableStoreStorageHandler MaxCompute 内置的处理 Table Store 数据的 StorageHandler,定义了 MaxCompute 和 Table Store 的交互,相关逻辑由 MaxCompute 实现。
(2) SERDEPROPERITES 可以理解为提供参数选项的接口,在使用 TableStoreStorageHandler 时,有两个必须指定的选项,分别是 tablestore.columns.mapping 和 tablestore.table.name。
(3) tablestore.columns.mapping 必填选项。MaxCompute 将要访问的 Table Store 表的列,包括主键和属性列。
其中,带:的表示 Table Store 主键,例如本示例中的 :vid 与 :gt,其他均为属性列。
在指定映射的时候,用户必须提供指定 Table Store 表的所有主键,属性列无需全部提供,可以只提供需要通过 MaxCompute 来访问的属性列。
(4) tablestore.table.name 需要访问的 Table Store 表名。 如果指定的 Table Store 表名错误(不存在),则会报错。MaxCompute 不会主动创建 Table Store 表。
(5) LOCATION 指定访问的 Table Store 的实例信息,包括实例名和 endpoint 等。

步骤 3. 通过外部表访问 Table Store 数据

创建外部表后,Table Store 的数据便引入到了 MaxCompute 生态中,您可通过 MaxCompute SQL 命令来访问 Table Store 数据。

  1. // 统计编号 4 以下的车辆在时间戳 1469171387 以前的平均速度和平均油耗
  2. select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;

返回类似如下结果:

执行MaxCompute SQL

本文导读目录