本文介绍如何在同一个云账号下实现表格存储和MaxCompute之间的无缝连接。
背景信息
MaxCompute是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案,使您可以经济并高效地分析处理海量数据。您只需通过一条简单的DDL语句,即可在MaxCompute上创建一张外部表,建立MaxCompute表与外部数据源的关联,提供各种数据的接入和输出能力。MaxCompute表是结构化的数据,而外部表可以不限于结构化数据。
表格存储与MaxCompute都有其自身的类型系统,两者之间的类型对应关系如下表所示。
Tablestore | MaxCompute |
---|---|
STRING | STRING |
INTEGER | BIGINT |
DOUBLE | DOUBLE |
BOOLEAN | BOOLEAN |
BINARY | BINARY |
准备工作
使用MaxCompute访问表格存储前,您需要完成以下准备工作:
步骤一:安装并配置客户端
步骤二:创建外部表
创建一张MaxCompute的数据表(ots_vehicle_track)关联到Tablestore的某一张表(vehicle_track)。
关联的数据表信息如下。
- 实例名称:cap1
- 数据表名称:vehicle_track
- 主键信息:vid(int),gt(int)
- 访问域名:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
CREATE EXTERNAL TABLE IF NOT EXISTS ots_vehicle_track
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double ,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)
WITH SERDEPROPERTIES ( -- (2)
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption', -- (3)
'tablestore.table.name'='vehicle_track' -- (4)
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'; -- (5)
参数说明如下:
标号 | 参数 | 说明 |
---|---|---|
(1) | com.aliyun.odps.TableStoreStorageHandler | MaxCompute内置的处理Tablestore数据的StorageHandler,定义了MaxCompute和Tablestore的交互,相关逻辑由MaxCompute实现。 |
(2) | SERDEPROPERITES | 可以理解为提供参数选项的接口,在使用TableStoreStorageHandler时,有两个必须指定的选项,分别是tablestore.columns.mapping和tablestore.table.name。 |
(3) | tablestore.columns.mapping | 必填选项。MaxCompute将要访问的Tablestore表的列,包括主键和属性列。其中,带: 的表示Tablestore主键,例如本示例中的:vid与 :gt ,其他均为属性列。在指定映射的时候,用户必须提供指定Tablestore表的所有主键,属性列无需全部提供,可以只提供需要通过MaxCompute来访问的属性列。
|
(4) | tablestore.table.name | 需要访问的Tablestore表名。 如果指定的Tablestore表名错误(不存在),则会报错。MaxCompute不会主动创建Tablestore表。 |
(5) | LOCATION | 指定访问的Tablestore的实例信息,包括实例名和endpoint等。 |
步骤三:通过外部表访问Tablestore数据
创建外部表后,Tablestore的数据便引入到了MaxCompute生态中,您可通过MaxCompute SQL命令来访问Tablestore数据。
//统计编号4以下的车辆在时间戳1469171387以前的平均速度和平均油耗。
select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
返回类似如下结果:
