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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #323333; background-color: #f9f9f9 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #323333 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; color: #323333 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #323333 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #323333; min-height: 18.0px }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #00c1de }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #f8f8f2; background-color: #222420 }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #75715e; background-color: #222420 }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #f8f8f2; background-color: #222420; min-height: 15.0px }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #f92a72; background-color: #222420 }
p.p11 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #e6db74; background-color: #222420 }
li.li2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #323333 }
li.li6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #00c1de }
span.s1 { }
span.s2 { color: #00c1de; background-color: transparent }
span.s3 { color: #00c1de }
span.s4 { color: #323333 }
span.s5 { color: #ae81ff }
span.s6 { color: #f92a72 }
span.s7 { color: #75715e }
span.s8 { color: #323333 }
span.s9 { color: #f8f8f2 }
span.s10 { }
span.s11 { color: #e6db74 }
td.td1 { width: 171.0px; margin: 0.5px 0.5px 0.5px 0.5px; border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #dddddd #dddddd #dddddd #dddddd; padding: 6.0px 12.0px 6.0px 12.0px }
td.td2 { width: 192.0px; margin: 0.5px 0.5px 0.5px 0.5px; border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #dddddd #dddddd #dddddd #dddddd; padding: 6.0px 12.0px 6.0px 12.0px }
ol.ol1 { list-style-type: decimal }
ul.ul1 { list-style-type: disc }

摘要: 大数据计算服务 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)

  • 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 旺旺账号
时间: 2024-08-01 09:26:08

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

Dreamweaver简明手册——常用功能介绍

1.概述 Dreamweaver 是一款集网页制作和管理网站于一身的所见即所得网页编辑器,在开发前端视图页面的时候,用这个工具,能让代码更清晰化,界面更整洁,可以大大的提升Web前端开发效率.基于数通畅联的AEAI DP开发平台可以直接生成JSP前端页面,通常在AEAI DP中使用JSP编辑器编辑JSP页面,但是JSP编辑器强于在JSP页面上写JAVA代码片段,但调整页面里的表单元素以及CSS样式等不方便,因此,一般采用AEAI D跟Dreamweaver配合进行前端JSP页面扩展开发.本文对D

GoodReader跨域访问HT for Web手册

最近下载了GoodReader App,发现GoodReader中打开的页面不仅支持WebGL,同时还允许跨域访问资源,以前不少HT for Web手册的例子需要Web服务器发布的方式才能访问,否则需采用<矢量组件设计之道(四)>列举的几种解决跨域访问图片或3D的OBJ等资源的技巧.而现在GoodReader中直接打开就可以玩了,加上GoodReader自身对文档管理的方便性,这1块钱的价格真是物超所值! 以下为GoodReader在iPhone下跨域访问HT for Web手册过程的视频,

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/2005

Git简明手册

文/AbnerKang(简书作者)原 文链接:http://www.jianshu.com/p/d7a7ba4f2341?utm_campaign=maleskine& utm_content=note&utm_medium=reader_share&utm_source=weixin&from=timeline&isappinstalled=0著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 一.git概述 区别于svn,git是个分布式的代码版本控

rsync简明手册

!rsync同步模式sync在进行同步或备份时,使用远程shell,或TCP连接远程daemon,有两种途经连接远程主机.shell模式,不需要使用配置文件,也不需要启动远端rsync.远程传输时一般使用ssh作为传输工具.daemon模式,但必须在一台机器上启动rsync. !rsync命令调用格式本地文件同步:    rsync [OPTION...] SRC... [DEST]示例:rsync -a /home/back1 /home/back2 基于远程shell同步:  拉取: rsy

VSS 2005 配置简明手册

vss2005下载地址  http://www.shangdu8.com/download/Microsoft.Visual.SourceSafe.2005_01.rar 1: http://cn-web.com/cnweb/44/233/article/             包含图解 2: 2007年08月19日 星期日 21:03 服务器端: 1.服务器端安装IIS(非Internet方式可不用) 2.安装VSS2005的服务器端(当然如果本地测试,客户端也同时装好了) 3.选择micr

gdb简明手册

如果是在windows环境下,首先要添加环境变量: 新建一个环境变量MinGW_PATH,值为MinGW的运行目录: 然后在系统的Path变量后面加上一句:(每两个变量之间用 ; 分开) -------------------------------我是萌萌哒分割线( ̄▽ ̄)------------------------------- 编译:g++ -g main.cpp -o main.exe 启动gdb环境:gdb main.exe gdb环境下的命令: list:显示代码 break 1

python简明手册学习

1.行末单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行. >>> "This is the first sentence.... This is the second sentence." 'This is the first sentence.This is the second sentence.' 2.自然字符串,如何需要某些字符串不需要转义,可以添加前缀r或R. >>> a = r"Newlines are indica

Greenplum使用简明手册

GP服务启停 su - gpadmin gpstart #正常启动 gpstop #正常关闭 gpstop -M fast #快速关闭 gpstop –r #重启 gpstop –u #重新加载配置文件 登陆与退出Greenplum #正常登陆 psql gpdb psql -d gpdb -h gphostm -p 5432 -U gpadmin #使用utility方式 PGOPTIONS="-c gp_session_role=utility" psql -h -d dbname