跳到主要内容
最后于 更新

BITMAP-UNION-INT

描述​

计算输入表达式中不同非负整数的个数,忽略负数和 NULL。

对于支持的整数类型,结果等价于 COUNT(DISTINCT CASE WHEN expr >= 0 THEN expr END) 和 BITMAP_COUNT(BITMAP_AGG(expr))。只有输入不包含负数时,结果才与 COUNT(DISTINCT expr) 相同。

使用说明​

忽略负数是开发版本的行为。早期版本可能将负数计入结果,因此升级后,包含负数的查询可能返回不同的结果。

语法​

BITMAP_UNION_INT(<expr>)

参数​

参数描述
<expr>输入的表达式,支持类型为 TinyInt,SmallInt,Integer。

返回值​

返回 BIGINT 类型,表示不同非负整数的个数。忽略 NULL 和负数。输入为空或组内只有 NULL 和负数时,返回 0;结果不会为 NULL。

示例​

-- setup
CREATE TABLE pv_bitmap (
dt INT,
page INT,
user_id BITMAP
) DISTRIBUTED BY HASH(dt) BUCKETS 1
PROPERTIES ("replication_num" = "1");
INSERT INTO pv_bitmap VALUES
(1, 100, to_bitmap(100)),
(1, 100, to_bitmap(200)),
(1, 100, to_bitmap(300)),
(1, 300, to_bitmap(300)),
(2, 200, to_bitmap(300));
Query OK, 0 rows affected
Query OK, 5 rows affected
select bitmap_union_int(dt) from pv_bitmap;
+----------------------+
| bitmap_union_int(dt) |
+----------------------+
| 2 |
+----------------------+
select bitmap_union_int(dt) from pv_bitmap where dt is null;
+----------------------+
| bitmap_union_int(dt) |
+----------------------+
| 0 |
+----------------------+

负数不计入结果,零计入结果:

SELECT bitmap_union_int(x) AS nonnegative_count
FROM (
SELECT -1 AS x UNION ALL SELECT 0 UNION ALL SELECT 1
UNION ALL SELECT 1 UNION ALL SELECT NULL
) AS input;
+-------------------+
| nonnegative_count |
+-------------------+
| 2 |
+-------------------+

组内只有负数和 NULL 时返回零:

SELECT bitmap_union_int(x) AS nonnegative_count
FROM (SELECT -1 AS x UNION ALL SELECT -2 UNION ALL SELECT NULL) AS input;
+-------------------+
| nonnegative_count |
+-------------------+
| 0 |
+-------------------+