在阿里云DataWorks中,分区查询的时候需要带上分区字段进行查询,否则会出现查询错误或者错误的查询结果。
原因是在MaxCompute等计算引擎中,表的数据会被按照分区字段的不同值拆分为不同的分区存储。在查询时,如果不带分区字段进行查询,计算引擎会将所有的分区的数据都进行扫描,导致查询效率低下甚至出现计算资源的浪费。
因此,建议在使用分区表进行查询时,一定要按照分区字段进行查询。如果您需要跨多个分区查询数据,可以使用MaxCompute的动态分区路由功能,通过指定一组分区来进行查询。
示例代码(MaxCompute SQL):
-- 使用动态分区路由查询2019年8月份和9月份的数据
SELECT *
FROM my_table
WHERE pt BETWEEN '20190801' AND '20190930';
在DataWorks中,分区查询必须带分区字段。因为分区查询是基于分区字段进行数据过滤的,如果不带分区字段,系统无法确定需要查询哪些分区的数据,也就无法进行分区查询。
"同步任务可以支持ODPS的数据列、分区列、常量列,但不支持函数列 ODPS分区配置支持linux shell通配符,* 表示0个或多个字符,? 代表任意一个字符
例如分区表 test存在 pt=1,ds=hangzhou pt=1,ds=shanghai pt=2,ds=hangzhou pt=2,ds=beijing 四个分区, 如果你想读取 pt=1,ds=shanghai 这个分区的数据,分区信息中配置: pt=1,ds=shanghai; 如果你想读取 pt=1下的所有分区,分区信息中配置 :pt=1,ds=; 如果你想读取整个 test 表的所有分区的数据,分区信息中配置 :pt=,ds=*
如果需要指定最大分区,可以配置如下信息:
/query/ ds=(select MAX(ds) from DataXODPSReaderPPR)
如果需要按条件过滤,可以配置如下信息:
/query/ pt>=20170101 and pt<20170110,表示pt分区大于等于20170101且小于20170110的所有数据
ODPS写插件指定分区技巧
需要写入数据表的分区信息,必须指定到最后一级分区。把数据写入一个三级分区表,必须配置到最后一级分区
例如:pt=20150101/type=1/biz=2
不支持写入多个分区 此回答整理自钉群“DataWorks交流群(答疑@机器人)”"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。