525
阿裏雲
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-阿裏雲