使用MaxCompute访问TableStore(OTS) 简明手册

关系数据库已经存在半个世纪,有非常广泛的使用场景,但是在快速迭代的互联网领域其扩展性和 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数据——授权

然后,准备好一个表格存储的实例以及一张数据表,表格存储实例管理,准备好实例名、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.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)
  • 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

常见错误处理:

  1. FAILED: ODPS-0010000:System internal error - fuxi job failed, WorkerPackageNotExist:需要设置set odps.task.major.version=unstructured_data
  2. FAILED: ODPS-0010000:System internal error - std::exception:Message: a timeout was reached:一般情况下是OTS的endpoint填写错误,导致ODPS没法访问,可以咨询ots_support旺旺账号
  3. logview invalid end_point:在执行过程中,会返回一个logview URL地址,如果使用浏览器访问该地址返回错误,可能是配置不对,请检查 MaxCompute 配置,并咨询 odps_support 旺旺账号
时间: 2017-03-10

使用MaxCompute访问TableStore(OTS) 简明手册的相关文章

MaxCompute访问TableStore(OTS) 数据(20170601更新)

免费开通大数据服务:https://www.aliyun.com/product/odps 0. 前言 MaxCompute作为阿里云大数据平台的核心计算组件,承担了集团内外大部分的分布式计算需求.而MaxCompute SQL作为分布式数据处理的主要入口,为快速方便处理/存储EB级别的离线数据提供了强有力的支持. 随着大数据业务的不断扩展,新的数据使用场景在不断产生,在这样的背景下,MaxCompute计算框架也在不断的演化,原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的开放给不同

linux下c/c++方式访问curl的帮助手册

自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用.记录下来方便后续查找   example:   1. http://curl.haxx.se/libcurl/c/example.html  2. http://www.libcurl.org/book:  1. http://www.linuxdevcenter.com/pub/a/linux/20

ASP.NET开发简明手册

asp.net asp.net作为visual studio.net的一个组成部分,是从asp发展过来的,但并不是asp的简单升级,而是microsoft推出的新一代active server pages. asp.net是微软的.net框架的重要组成部分,它使用vb.net.c#和jscript.net程序设计语言来实现动态网页编程,这使得它的编程非常灵活和高效.同时asp.net是基于组件技术和面向对象的开发系统,程序员可以使用系统的丰富组件,如文件上传.e-mail发送.文件操作.广告组件

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171122)

  概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.本文收录了大量的MaxCompute产品介绍.技术介绍,帮助您快速了解MaxCompute/ODPS. MaxCompute 2.0:阿里巴巴的大数

表格存储技术方案实践及客户案例分享

表格存储是一款2014年10月份正式商业化的NoSQL数据存储服务,在商业化之前,早在2010年就在阿里云内部开始使用,云邮箱和云OS都是表格存储最早的一批用户.到目前,无论是在阿里集团内部还是在公共云环境上,在移动社交.金融风控.电商物流.存储备份.物联网IoT.日志监控.大数据分析报表等领域都有着广泛的用户基础与成熟的实践方案. 为了方便更多的用户了解和使用表格存储,该帖子会将最近非常有参考意义的方案设计.技术实践及相关客户分享的博客文章汇总到这里,大家可以在这里快速查找到和自己业务场景相近

【产品动态】云存储3月月刊

存储头条 低频存储OSS IA全新上线 文件存储容量型NAS正式发布 容量型NAS是对性能型NAS的补充,满足低成本大容量的企业文件存储场景. > 参考链接:https://www.aliyun.com/price/product?#/nas/detail 产品更新 对象存储 [新产品]低频存储OSS IA全新上线  OSS支持新的存储类型,适用于访问频度较少.长期(30天以上)的数据存储,享受更低成本. 参考链接:https://m.aliyun.com/markets/aliyun/act/

基于TableStore的数据采集分析系统介绍

摘要 在互联网高度发达的今天,ipad.手机等智能终端设备随处可见,运行在其中的APP.网站也非常多,如何采集终端数据进行分析,提升软件的品质非常重要,例如PV/UV统计.用户行为数据统计与分析等.虽然场景简单,但是数据量大,对系统的吞吐量.实时性.分析能力.查询能力都有较高的要求,搭建起来并不容易.今天我们来介绍一下基于阿里云表格存储,以及相关的大数据产品来采集与分析数据的方案. TableStore TableStore(表格存储)是阿里云自主研发的专业级分布式NoSQL数据库,是基于共享存

快速认识OTS

什么是OTS   OTS 是Open Table Service的简称,现在已更名为表格存储Table Store,官网对它的解释为:OTS是构建在阿里云飞天分布式系统之上的 NoSQL 数据库服务,提供海量结构化数据的存储和实时访问.OTS 以实例和表的形式组织数据,通过数据分片和负载均衡技术,达到规模的无缝扩展.OTS 向应用程序屏蔽底层硬件平台的故障和错误,能自动从各类错误中快速恢复,提供非常高的服务可用性.OTS 管理的数据全部存储在 SSD 中并具有多个备份,提供了快速的访问性能和极高

【阿里云大数据产品MaxCompute(原名ODPS)】DT时代企业数据资产的护卫舰

免费开通大数据服务:https://www.aliyun.com/product/odps 阿里云数加MaxCompute(原名ODPS)设计之初就是面向多租户,确保租户的数据安全是MaxCompute的必备功能之一.在MaxCompute系统的安全设计和实现上,MaxCompute的工程师们会遵循一些经过实践检验的安全设计原则(如Saltzer-Schroeder原则).在常用密码算法及安全协议的设计和实现上,也会遵循业界相关标准(如PKCS-及FIPS-系列标准),并坚持最佳安全实践. 这里

表格存储结合Elasticsearch进行搜索的场景分析和实践

表格存储结合Elasticsearch进行搜索的场景分析和实践 表格存储(TableStore)是什么 TableStore是一个构建在阿里云飞天分布式系统上的Nosql数据库服务,熟悉阿里云的同学肯定听说过飞天5K,飞天是一个可以管理5000台机器的分布式系统,TableStore作为构建在其上的一个Nosql数据库,可以承载海量(单表几百TB)的数据存储,同时数据有三份拷贝,数据安全性有极高的保证. TableStore的数据是以行进行组织的,每行包含多个主键列和多个属性列,主键列的列名和类