4.2 逻辑表达式和特殊语法__第四章 DML_使用手册_分析型数据库-阿里云
表Join的条件
为了更高效的进行表关联,分析型数据库对表关联操作在分析型数据库中,两个事实表进行Join的充要条件是:(1)这两个表在一个表组;(2)这两个表的Join Key是Hash分区列;(3)两张表的Hash分区数必须一致,否则Join结果不准确;(4)两张表的Join Key至少有一列建立了HashMap索引,推荐建立在数据量较小的一侧。
维度表参与的关联,只需要符合上述的(4)一点即可。
逻辑表达式
在分析型数据库中对逻辑表达式的支持如下:
NOT a:如果表达式(a)是0则返回1,非0则返回0,NULL则返回NULL!a:同上a && b:如果表达式(a)和(b)都不是NULL且都非0则返回1,如果其中有一个是0则返回0,否则返回NULLa || b:如果表达式(a)和(b)都是0是返回0否则如果都不是NULL则返回1,如果其中有一个为NULL则另外一个是0则返回0,非0则返回1,如果都是NULL则返回NULL
例如:
NOT 0:1NOT 5:0NOT NULL:NULLNOT a:根据表达式(a)的取值决定! 0:1! 5:0! NULL:NULL! a:根据表达式(a)的取值决定1 && 5:11 && 0:05 && 0:0NULL && 0:0NULL && NULL:NULLNULL && 5:NULLa && b:根据表达式(a)和表达式(b)的取值决定a AND b:同上0 || 0:01 || 5:1NULL || 1:1NULL || 5:1NULL || 0:0NULL || NULL:NULLa || b:根据表达式(a)和表达式(b)的取值决定a OR b:同上
多值列的用法和限制
在分析型数据库中,多值列这个数据类型有其特殊的用法和限制。对于多值列,不允许在不经由WHERE子句中用IN/CONTAINS进行枚举筛选的情况信下直接在SELECT/GROUP BY中使用。
例如:
SELECT m, COUNT(a) FROM A WHERE m IN('foo', 'bar') GROUP BY m, m为多值列,这种情况下可支持。SELECT m FROM A limit 10, m为多值列时不支持SELECT m, COUNT(a) FROM A GROUP BY m,m为多值列时不支持
另外,由于多值列的数据结构的特殊性,在对含有多值列的行按照多值列进行分组时,多值列的每一个单值会等价于产生一个新的行,计算count/sum等聚合函数的结果可能会被多次计算。
例如原始数据如下:
| a | m |
|---|---|
| 0 | ‘bar’ |
| 1 | ‘foo’, ‘bar’ |
| 2 | ‘foo’, ‘bar’, ‘oh’ |
在此之上执行 SELECT m, COUNT(a) FROM A WHERE m IN('foo', 'bar') GROUP BY m 的结果:
| m | COUNT(a) |
|---|---|
| ‘foo’ | 2 |
| ‘bar’ | 3 |
| ‘oh’ | 1 |
非分区列的使用限制
分析型数据库作为分布式实时OLAP系统,其数据根据分区列分布在不同的物理服务器中,所以在一些特殊的情况下,分区列和非分区列的使用上有所不同。
count(distinct cor_expr)中cor_expr必须是分区列或分区列衍生的列,否则不能和group by连用SELECT distinct cor_expr...中若cor_expr不是分区列或分区列衍生的列,则结果可能不精确- TOP-N计算(order by expr limit 100 ),若是同时和非分区列的GROUP BY子句连用,结果可能不精确
0.9版本的Full MPP Mode支持上述SQL的正确运行,详见4.4节
子查询使用限制
分析型数据库中,0.8版本及先前版本,子查询使用有所限制,例如:
select count(*) from (select a from tbl group by a) tmp;-- a不是一级分区列时结果不准确,当group by a 返回结果不超过10000条时,可以临时使用:select udf_sys_rowcount(*) from (select a from tbl group by a) tmp;
select a, cnt from (select a,count(b) as cnt from tbl group by a) tmp;-- a,b均不是一级分区列时结果不准确,可以临时使用:select a, sum(cnt) from (select a,count(b) as cnt from tbl group by a) tmp group by a;
0.9版本的Full MPP Mode支持上述SQL的正确运行,详见4.4节
最后更新:2016-11-23 16:03:54
上一篇:
4.1 Select语句基本语法__第四章 DML_使用手册_分析型数据库-阿里云
下一篇:
4.3 INSERT/DELETE命令__第四章 DML_使用手册_分析型数据库-阿里云
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云