跳到主要内容
版本: 最新版本-3.5

intersect_count

此函数用于查找两个 Bitmap 值的交集大小(相同元素的数量),而无需数据分布是正交的。 第一个参数是 Bitmap 列,第二个参数是用于过滤的维度列,第三个参数是可变长度参数,表示过滤维度列的不同值。

如果没有交集,则返回 0。

语法

BIGINT INTERSECT_COUNT(bitmap_column, column_to_filter, filter_values)

参数

  • bitmap_column:要计算的 bitmap 列。
  • column_to_filter:要相交的列的名称。
  • filter_values:已过滤维度列的不同值。

返回值

返回 BIGINT 类型的值。

示例

创建一个包含 Bitmap 列 user_id 的 Aggregate 表并插入数据。

CREATE TABLE `tbl` (
`dt` date NULL COMMENT "",
`user_id` bitmap BITMAP_UNION NULL COMMENT ""

) ENGINE=OLAP
AGGREGATE KEY(`dt`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`dt`);

INSERT INTO `tbl` VALUES
('2020-10-01', to_bitmap(2)),
('2020-10-01', to_bitmap(3)),
('2020-10-01', to_bitmap(5)),
('2020-10-02', to_bitmap(2)),
('2020-10-02', to_bitmap(3)),
('2020-10-02', to_bitmap(4)),
('2020-10-03', to_bitmap(1)),
('2020-10-03', to_bitmap(5)),
('2020-10-03', to_bitmap(6));

SELECT dt, bitmap_to_string(user_id) from tbl;
+------------+---------------------------+
| dt | bitmap_to_string(user_id) |
+------------+---------------------------+
| 2020-10-02 | 2,3,4 |
| 2020-10-03 | 1,5,6 |
| 2020-10-01 | 2,3,5 |
+------------+---------------------------+

计算与 '2020-10-01''2020-10-02' 对应的相同 user_id 的数量。找到两个相同元素(2 和 3)并返回数字 2

mysql>  select intersect_count(user_id, dt, '2020-10-01', '2020-10-02')
from tbl
where dt in ('2020-10-01', '2020-10-02');
+----------------------------------------------------------+
| intersect_count(user_id, dt, '2020-10-01', '2020-10-02') |
+----------------------------------------------------------+
| 2 |
+----------------------------------------------------------+

计算与 '2020-10-01''2020-10-03' 对应的相同 user_id 的数量。找到一个元素 5 并返回数字 1

mysql>  select intersect_count(user_id, dt, '2020-10-01', '2020-10-03')
from tbl
where dt in ('2020-10-01', '2020-10-03');
+----------------------------------------------------------+
| intersect_count(user_id, dt, '2020-10-01', '2020-10-03') |
+----------------------------------------------------------+
| 1 |
+----------------------------------------------------------+