标签:映射 需求 handler package tps bin artifact 如何使用 rac
摘要: 大数据计算服务 MaxCompute 能够提供强大的分析能力,而分布式 NoSQL 数据库表格存储在行级别上的实时更新和可覆盖性写入等特性,相对于 MaxCompute 内置表 append-only 批量操作,提供了一个很好的补充。
关系数据库已经存在半个世纪,有非常广泛的使用场景,但是在快速迭代的互联网领域其扩展性和 schema 灵活性被诟病颇多,因此类似 TableStore/BigTable/HBase 等强调扩展性和灵活性的NoSQL数据库逐步流行起来,这些 NoSQL 数据库只提供 API 接口,不提供 SQL 访问,这就导致很多熟悉 SQL 但是不喜欢写代码的用户没法很舒服的使用此类NoSQL数据库。基于此,表格存储开发团队联合 MaxCompute(下文中 ODPS 与 MaxCompute 同义)团队打通了 ODPS-SQL 访问表格存储的路径,这样一个只懂 SQL 的用户也可以愉快的访问表格存储里面的大量数据了。
本篇文章就以一个小白用户的身份体验如何使用 MaxCompute-SQL 查询表格存储里面的数据,以及如何开发自定义逻辑(User Defined Function, UDF)来处理用户特定的数据格式。
什么是表格存储 TableStore?
分布式NoSQL数据存储服务,无缝支持单表PB级数据及百万级访问并发,弹性资源,按量计费,对数据高频的增、删、改支持的很好,保证单行数据读写的强一致性。
什么是大数据计算服务 MaxCompute?
一种快速、完全托管的TB/PB级数据仓库解决方案,提供多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题。
下面首先我们将介绍环境准备,这是所有后面的操作的基础。然后会介绍使用 OdpsCmd 访问表格存储。在第三节我们介绍使用 OdpsStudio 访问表格存储。最后介绍如何写 UDF、部署 UDF 以及在查询中使用 UDF。
环境准备
首先,准备好一个 MaxCompute 的工程,工程创建指导文档,准备好AccessId和AccessKey备用,为了区别其他产品的AccessId和AccessKey,后面我们称之为ODPS-AccessId,ODPS-AccessKey。并在RAM中授权 MaxCompute 访问 TableStore 的权限,授权方式请参考MaxCompute访问TableStore数据——授权
小提示:由于 MaxCompute 在 2.0 版本的计算框架才能支持直接访问 TableStore 数据,该版本还在灰度上线中,目前还需要 申请MaxCompute 2.0试用,具体开通使用方法请参见 如何申请试用MaxCompute 2.0。
然后,准备好一个表格存储的实例以及一张数据表,表格存储实例管理,准备好实例名、EndPoint,为了区别其他产品的AccessId和AccessKey,后面我们称之为TableStore-InstanceName,TableStore-EndPoint。
网络连通性
MaxCompute 与 TableStore 是两个独立的大数据计算以及大数据存储服务,所以两者之间的网络必须保证连通性。 对于 MaxCompute 公共云服务访问 TableStore 存储,推荐使用 TableStore 私网 地址,例如http://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com。
如果网络不通,可以使用公网地址,TableStore原生支持 VPC 网络控制,也需要将网络类型设置为 "允许任意网络访问"。
使用客户端 ODPS-CMD
1.下载并安装大数据计算服务客户端
2.下载解压,将conf/odps_config.ini 的内容修改为:
project_name=上面申请的ODPS工程名
access_id=ODPS-AccessId
access_key= ODPS-AccessKey
end_point=http://service-corp.odps.aliyun-inc.com/api
https_check=true
# confirm threshold for query input size(unit: GB)
data_size_confirm=100.0
# this url is for odpscmd update
update_url=http://repo.aliyun.com/odpscmd
3.行bin/odpscmd,输入show tables,正常执行则表示上面配置正确。
4.在bin/odpscmd 下输入环境变量,显式开启 ODPS 2.0 的非结构化功能( 仅在 ODPS 2.0 计算框架完全上线为必须),单独执行 xx.sql 文件时也需要将下属设置写在 SQL 文件的开头处。
set odps.task.major.version=2dot0_demo_flighting;
set odps.sql.planner.mode=lot;
set odps.sql.ddl.odps2=true;
set odps.sql.preparse.odps2=lot;
set odps.sql.type.system.odps2=true; --是支持表格存储的binary类型
5.创建一张 MaxCompute 的数据表关联到 TableStore 的某一张表。
关联的数据表信息如下:
DROP TABLE IF EXISTS ots_vehicle_track;
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://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com‘; -- (5)
TableStore数据类型 |
MaxCompute数据类型 |
string |
string |
binary |
blob |
int |
bigint |
double |
double |
6.执行ODPS-SQL
// 统计编号 4 以下的车辆在时间戳 1469171387 以前的平均速度和平均油耗
select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
使用 UDF(User Defined Function)处理数据
有时候用户在表格存储里面的数据有独特的结构,希望自己开发逻辑来处理每一行数据,比如解析特定的json字符串,这一块的开发也已经很方便了。
1.按照MaxCompute Studio文档的说明在IntelliJ里面安装MaxCompute-Java/MaxCompute-Studio插件,一旦插件安装完毕,就可以直接开发。
比如下面就是一个简单的 UDF 定义,只是简单的将两个字符串连接。 MaxCompute 支持更复杂的UDF,包括自定义窗口执行逻辑等,详细请参考MaxCompute Studio-开发 UDF。
2.打包之后可以上传到 MaxCompute,其中打包这里有需要注意的地方,File->Project Structure->Artifacts, 填写好 Name 和 Output Directory 后,要点击 + 选择输出模块,打包后通过 ODPS Project Explorer 来上传资源、创建函数,然后就可以在SQL中调用。
3.打开bin/odpscmd,输入
// 我们选出来1行数据,并将name/name传入UDF,返回两个string的累加
select cloud_metric_extract_md5(name, name) as udf_test from test_table limit 1;
写在最后
目前ODPS-SQL访问 TaleStore 还在对执行逻辑进行深度的优化,如果有需求请联系ots_support,我们将针对业务场景来进行优化。
FAQ
常见错误处理:
使用MaxCompute访问TableStore(OTS) 简明手册
标签:映射 需求 handler package tps bin artifact 如何使用 rac
原文地址:http://www.cnblogs.com/aliyunblogs/p/6846226.html