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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 大数据计算服务 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数据——授权

然后,准备好一个表格存储的实例以及一张数据表,表格存储实例管理,准备好实例名、EndPoint,为了区别其他产品的AccessId和AccessKey,后面我们称之为TableStore-InstanceName,TableStore-EndPoint。

网络连通性

MaxCompute 与 TableStore 是两个独立的大数据计算以及大数据存储服务,所以两者之间的网络必须保证连通性。 对于 MaxCompute 公共云服务访问 TableStore 存储,推荐使用 TableStore 私网 地址,例如http://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com

如果网络不通,可以使用公网地址,TableStore原生支持 VPC 网络控制,也需要将网络类型设置为 "允许任意网络访问"

ots_endpoint

使用客户端 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,正常执行则表示上面配置正确。

odps_showtables

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;

odps_sql

使用 UDF(User Defined Function)处理数据

有时候用户在表格存储里面的数据有独特的结构,希望自己开发逻辑来处理每一行数据,比如解析特定的json字符串,这一块的开发也已经很方便了。

1.按照MaxCompute Studio文档的说明在IntelliJ里面安装MaxCompute-Java/MaxCompute-Studio插件,一旦插件安装完毕,就可以直接开发。

比如下面就是一个简单的 UDF 定义,只是简单的将两个字符串连接。 MaxCompute 支持更复杂的UDF,包括自定义窗口执行逻辑等,详细请参考MaxCompute Studio-开发 UDF

odps_studio

2.打包之后可以上传到 MaxCompute,其中打包这里有需要注意的地方,File->Project Structure->Artifacts, 填写好 Name 和 Output Directory 后,要点击 + 选择输出模块,打包后通过 ODPS Project Explorer 来上传资源、创建函数,然后就可以在SQL中调用。

odps_studio_2

3.打开bin/odpscmd,输入

// 我们选出来1行数据,并将name/name传入UDF,返回两个string的累加
select cloud_metric_extract_md5(name, name) as udf_test from test_table limit 1;

odps_studio_3

写在最后

目前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 旺旺账号
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
2月前
|
存储 分布式计算 Hadoop
maxcompute配置问题之加速查询超时配置回退如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
33 1
|
2月前
|
分布式计算 Cloud Native MaxCompute
MaxCompute数据问题之没有访问权限如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
38 0
|
2月前
|
SQL 分布式计算 DataWorks
maxcompute开发环境问题之访问开发环境失败如何解决
MaxCompute开发环境是指设置和配置用于开发MaxCompute项目的本地或云端环境;本合集将指导用户如何搭建和管理MaxCompute开发环境,包括工具安装、配置和调试技巧。
|
9月前
|
Cloud Native 大数据
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——云原生、大数据、计算的结合
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——云原生、大数据、计算的结合自制脑图
175 1
|
8月前
|
SQL 安全 大数据
怎么做好大数据安全访问管控?彭文华
怎么做好大数据安全访问管控?彭文华
|
9月前
|
分布式计算 Cloud Native 大数据
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——迁移到MaxCompute
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——迁移到MaxCompute自制脑图
117 1
|
9月前
|
Cloud Native 大数据
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——简介
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——简介自制脑图
105 1
|
11月前
|
分布式计算 Cloud Native 大数据
《阿里云产品手册2022-2023 版》——云原生大数据计算服务 MaxCompute
《阿里云产品手册2022-2023 版》——云原生大数据计算服务 MaxCompute
350 0
|
11月前
|
大数据
《阿里云产品手册2022-2023 版》——中国政务大数据市场第一
《阿里云产品手册2022-2023 版》——中国政务大数据市场第一
|
11月前
|
分布式计算 Cloud Native 大数据
《阿里云产品手册2022-2023 版》——云原生大数据计算服务 MaxCompute
《阿里云产品手册2022-2023 版》——云原生大数据计算服务 MaxCompute
115 0