Семплирование и объем данных

508 views
Skip to first unread message

Mikhail Petrov

unread,
Oct 28, 2016, 10:33:17 AM10/28/16
to ClickHouse
Привет.

Странный вопрос: есть ли какие-то best practices для семплирования? Другими словами, что делать, если объем данных все-таки слишком большой для хранения всего, при этом для работы достаточно, например, каждой сотой строки (погрешность вполне допустима)? При этом есть ощущение, что простая аггрегация не даст никакого значимого изменения.

Может быть, есть какие-то стандартные пути, типа insert select оригинальных данных в какой-нибудь AggregatingMergeTree с каким-то описанием данных семплирования?

man...@gmail.com

unread,
Oct 29, 2016, 2:51:48 PM10/29/16
to ClickHouse
Привет.

В ClickHouse есть встроенная возможность сэмплирования. Но её сценарий использования несколько другой.
Суть его в том, что в таблице продолжают храниться все данные и в стоимости хранения мы ничего не выигрываем,
но при этом данные отсортированы таким образом, что из таблицы можно достаточно легко прочитать любой сэмпл данных.

Для этого в таблице должен быть задан ключ сэмплирования, который позволяет выбрать - какого вида выборка данных нас интересует. Например, выборка подмножества посетителей - чтобы данные одного посетителя либо целиком попали либо целиком не попали в выборку. После этого, сэмплирование поддерживается на уровне синтаксиса: можно написать SELECT ... FROM table SAMPLE 0.1.

Другое дело, если нужно сохранять меньше данных в таблицу.
Для этого проще всего реализовать эту функциональность на стороне клиента.
Пример. Сделать несколько таблиц вида:

hits,
hits_10,
hits_100

Одновременно писать все данные в hits, десятую долю в hits_10, сотую долю в hits_100.
Потом данные из hits удалять через месяц, а данные в hits_10, hits_100 не удалять.

Писать сразу в сэмплированные таблицы гораздо проще, чем потом перекладывать данные INSERT SELECT-ом, хотя такое тоже можно.

Также несколько независимых таблиц, которые одновременно, заполняются клиентом - это более простое решение, чем использовать MATERIALIZED VIEW. Впрочем, его тоже можно использовать, но "явный" вариант мне нравится больше.
Reply all
Reply to author
Forward
0 new messages