本文介绍如何在同一个云账号下实现表格存储和MaxCompute之间的无缝连接。
背景信息
MaxCompute是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案,使您可以经济并高效地分析处理海量数据。您只需通过一条简单的DDL语句,即可在MaxCompute上创建一张外部表,建立MaxCompute表与外部数据源的关联,提供各种数据的接入和输出能力。MaxCompute表是结构化的数据,而外部表可以不限于结构化数据。
表格存储与MaxCompute都有其自身的类型系统,两者之间的类型对应关系如下表所示。
|
Tablestore |
MaxCompute |
|
STRING |
STRING |
|
INTEGER |
BIGINT |
|
DOUBLE |
DOUBLE |
|
BOOLEAN |
BOOLEAN |
|
BINARY |
BINARY |
准备工作
使用MaxCompute访问表格存储前,您需要完成以下准备工作:
-
开通MaxCompute服务。
-
创建AccessKey。
-
在本示例中,创建的表格存储实例和数据表信息如下:
-
实例名称:cap1
-
数据表名称:vehicle_track
-
主键信息:vid(integer),gt(integer)
-
访问域名:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com说明使用MaxCompute访问表格存储时,建议使用表格存储的私网地址。
-
设置实例网络访问控制。表格存储默认支持通过任意网络访问实例,保持默认配置即可。配置如下:
默认访问类型为自定义,允许网络类型中VPC、经典网、公网均已勾选,允许来源类型中可信网关(控制台)已勾选,单击设置即可保存。
-
步骤一:安装并配置客户端
-
下载MaxCompute客户端并解压。
说明确保您的机器上已安装JRE 1.7或以上版本。
-
编辑conf/odps_config.ini文件,对客户端进行配置,如下所示。
# access_id和access_key是用户的云账号AccessKey信息(包括AccessKey ID和AccessKey Secret),可登录阿里云官网,进入管理控制台,移动鼠标到右上角头像后单击AccessKey进行查看。 access_id=******************* access_key=********************* # 指定用户想进入的项目空间。 project_name=my_project # MaxCompute服务的访问链接。 end_point=https://service.odps.aliyun.com/api # MaxCompute Tunnel服务的访问链接。 tunnel_endpoint=https://dt.odps.aliyun.com # 当用户执行一个作业后,客户端会返回该作业的LogView地址。打开该地址将会看到作业执行的详细信息。 log_view_host=http://logview.odps.aliyun.com # 决定是否开启HTTPS访问。 https_check=true说明odps_config.ini文件中使用
#作为注释,MaxCompute客户端内使用--作为注释。 -
运行bin/odpscmd.bat,输入
show tables;。如果显示当前MaxCompute项目中的表,则表示上述配置正确。
odps@ MCOTStest>show tables; ALIYUN$document@aliyun-test.com:bank_data ALIYUN$document@aliyun-test.com:result_table OK
步骤二:创建外部表
创建一张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表的列,包括主键和属性列。其中,带 |
|
(4) |
tablestore.table.name |
需要访问的Tablestore表名。 如果指定的Tablestore表名错误(不存在),则会报错。MaxCompute不会主动创建Tablestore表。 |
|
(5) |
LOCATION |
指定访问的Tablestore的实例信息,包括实例名和endpoint等。 |
步骤三:通过外部表访问Tablestore数据
并发过高可能导致表格存储实例的水位上升,进而造成业务在线访问延迟升高,甚至部分请求出错。可通过设置set odps.sql.mapper.split.size=256调整并行度,调大该值可降低并发,调小则提升并发。更多信息,请参见SQL调优。
创建外部表后,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;
返回类似如下结果:
odps@ analysis_vehicle>select vid,count(*), avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
ID = 20170306160538185gsvlupk2
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=analysis_vehicle&i=20170306160538185gsvlupk2&token=ajhxdXZNWWVPcTNrWkFOS0xpSGtoM2tFWGEwPSxPRFBT
09CTzoxNjA0MzM3MzgzMTc0NjE5LDE0ODk0MjExMzgseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2NJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
Job Queueing.
STAGES STATUS TOTAL COMPLETED RUNNING PENDING BACKUP
M1_job_0 .............. TERMINATED 1 1 0 0 0
R2_1_job_0 ............. TERMINATED 1 1 0 0 0
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 51.18 s
Summary:
+------------+------------+----------------------+----------------------+
| vid | _c1 | _c2 | _c3 |
+------------+------------+----------------------+----------------------+
| 0 | 47 | 0.11622589796672624 | 6.5155061805308145 |
| 1 | 47 | 0.11200649789552555 | 6.5673983001829885 |
| 2 | 47 | 0.098971763146085 | 6.738738527883797 |
| 3 | 47 | 0.11503916531605494 | 6.6038902692751895 |
+------------+------------+----------------------+----------------------+