使用MaxCompute访问TableStore(OTS) 简明手册
摘要: 大数据计算服务 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 的某一张表。
关联的数据表信息如下:
- 实例名称:vehicle-test
- 数据表名称:vehicle_track
- 主键信息:vid(int); gt (int)
- 访问域名:https://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com
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)
- com.aliyun.odps.TableStoreStorageHandler 是 MaxCompute 内置的处理 TableStore 数据的 StorageHandler, 定义了 MaxCompute 和 TableStore 的交互,相关逻辑由 MaxCompute 实现。
- SERDEPROPERITES 可以理解成提供参数选项的接口,在使用 TableStoreStorageHandler 时,有两个必须指定的选项,分别是下面介绍的 tablestore.columns.mapping 和 tablestore.table.name。 更多的可选选项将在后面其他例子中提及。
- tablestore.columns.mapping 选项:必需选项,用来描述对需要 MaxCompute 将访问的 TableStore 表的列,包括主键和属性列。 这其中以 : 打头的用来表示 TableStore 主键,例如这个例子中的 :vid:gt。 其他的均为属性列。 TableStore支持最少1个,最多4个主键,主键类型为 bigint 或 string,其中第一个主键为分区键。 在指定映射的时候,用户必须提供指定 TableStore 表的 所有主键,对于属性列则没有必要全部提供,可以只提供需要通过 MaxCompute 来访问的属性列。
- tablestore.table.name:需要访问的 TableStore 表名。 如果指定的 TableStore 表名错误(不存在),则会报错,MaxCompute 不会主动去创建 TableStore 表。
- LOCATION 用来指定访问的 TableStore 的实例信息,包括 instance 名字,endpoint 等。
- 数据格式对应,MaxCompute 与 TableStore 的数据格式对应如下:
|
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
常见错误处理:
- FAILED: ODPS-0010000:System internal error - fuxi job failed, WorkerPackageNotExist:需要设置set odps.task.major.version=unstructured_data
- FAILED: ODPS-0010000:System internal error - std::exception:Message: a timeout was reached:一般情况下是OTS的endpoint填写错误,导致ODPS没法访问,可以咨询ots_support旺旺账号
- logview invalid end_point:在执行过程中,会返回一个logview URL地址,如果使用浏览器访问该地址返回错误,可能是配置不对,请检查 MaxCompute 配置,并咨询 odps_support 旺旺账号
使用MaxCompute访问TableStore(OTS) 简明手册的更多相关文章
- Python 绝对简明手册
Python 绝对简明手册 help(函数名)来获取相关信息 另外,自带的文档和google也是不可少的 2. 基本语法2.1. if / elif / else x=int(raw_input(&q ...
- tomcat和iis共用80端口的简明手册
对于使用tomcat-connector实现iis与tomcat实现80端口共用的问题,网上的信息异常混乱,很多地方误人子弟,浪费时间.本文给出简明手册式的做法: 首先列出我们需要做的事项: 1. ...
- PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级
参考来源: https://github.com/digoal/blog/blob/master/201803/20180326_01.md#postgresql-一主多从多副本强同步简明手册---配 ...
- GoodReader跨域访问HT for Web手册
最近下载了GoodReader App,发现GoodReader中打开的页面不仅支持WebGL,同时还允许跨域访问资源,以前不少HT for Web手册的例子需要Web服务器发布的方式才能访问,否则需 ...
- linux下c/c++方式访问curl的帮助手册
自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用.记 ...
- Git 简明手册
0,Git 是什么 Git 是一个VCS(Version Control System),即版本控制系统. 版本控制系统从字面意思来看,它的用途就是管理/控制文件的版本.使用它,可以方便的知道一个文件 ...
- Subversion简明手册--使用hook svn
使用 hook ,为了方便管理员 控制提交的过程 Subversion 提供了 hook 机制.当特定的 事件发生时,相应的 hook 会被调用, hook 其实就相当于特定 事件的处理函数.每个 h ...
- Git简明手册
文/AbnerKang(简书作者)原 文链接:http://www.jianshu.com/p/d7a7ba4f2341?utm_campaign=maleskine& utm_content ...
- Greenplum使用简明手册
GP服务启停 su - gpadmin gpstart #正常启动 gpstop #正常关闭 gpstop -M fast #快速关闭 gpstop –r #重启 gpstop –u #重新加载配置文 ...
随机推荐
- 下载apache-tomcat-9.0.17-windows-x64及安装以及用途
首先我们先去这个网站下载http://www.apache.org/,进入Tomcat,点击Tomcat9 下载64-bit Windows_zip 当我们下载好了之后解压,把多余的文件删除掉,也可以 ...
- 【GDOI2015】 水题 tarjan缩点
这一题,我当年只会$60$分做法..... 我们考虑对原图跑一波边双,然后缩成一个森林. 对于森林中的每一棵树,我们钦定一个根. 令$siz[x]$表示以$x$为根的子树中,在原图中点的个数. 令当前 ...
- 【loj6437】 【PKUSC2018】 PKUSC 计算几何
题目大意:给你一个m个点的简单多边形.对于每个点i∈[1,n],作一个以O点为原点且过点i的圆,求该圆在多边形内的圆弧长度/圆长. 其中n≤200,m≤500. 我们将n个点分开处理. 首先,我们要判 ...
- 添加或删除 HTML dom元素
添加或删除 HTML dom元素 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. <div id=" ...
- 原生ajax封装,包含post、method方式
原生ajax封装,包含post.method方式 function ajax(method, url, data, success) { var xhr = null; try { xhr = new ...
- (转)用Python写堡垒机项目
原文:https://blog.csdn.net/ywq935/article/details/78816860 前言 堡垒机是一种运维安全审计系统.主要的功能是对运维人员的运维操作进行审计和权限控制 ...
- Vue的watch监听事件
Vue的watch监听事件 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- 【Express系列】第1篇——项目创建
安装 node 和 Express 4 node官网:http://nodejs.org/ Express Github:https://github.com/expressjs/express ...
- springweb flux 编程模型
Spring WebFlux 编程模型是在spring5.0开始,springbot2.0版本设计出来的新的一种反应式变成模型.它脱胎于reactor模式,是java nio 异步编程模型. 传统一般 ...
- redis-java中的callback回掉机制
springboot整合redis后, 会提供StringRedisTEmplate和 RedisTemplate 两个模板类供食用, 有时候这并不能满足我们的需求, 需要使用 connect 处理, ...