Перейти к основному содержимому

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 и вставьте данные.

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 |
+------------+---------------------------+

Вычислите количество одинаковых user_id, соответствующих '2020-10-01' и '2020-10-02'. Найдены два одинаковых элемента (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 |
+----------------------------------------------------------+

Вычислите количество одинаковых user_id, соответствующих '2020-10-01' и '2020-10-03'. Найден один элемент 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 |
+----------------------------------------------------------+