Невозможно увидеть данные, загруженные в clickhouse, если я перезапускаю свой сервер clickhouse

Я использую базу данных clickhouse для загрузки некоторых метрик в реальном времени ... поэтому я создал таблицу с движком kafka и загрузил в нее около 1 миллиона метрик ... но дело в том, если я перезапущу свой клиент clickhouse и выберу * из tablename я не могу увидеть загруженные в него данные .. как я могу увидеть эти данные?

CREATE TABLE cpuinfo (timestamp String, namespace String, data Float, unit String, plugin_running_on String, version UInt64, last_advertised_time String) ENGINE = Kafka('10.224.54.99:9092', 'cpuout', 'group1', 'JSONEachRow');

Приведенную выше таблицу я создал и начал собирать данные следующим образом.

select * from cpuinfo

и если я перезапущу свой клиент clickhouse, а затем выполню ту же команду select * from cpuinfo, я не смогу увидеть загруженные данные ... как я могу увидеть данные?


person Rakshitha Kademane    schedule 25.01.2018    source источник


Ответы (1)


Используете ли вы MATERIALIZED VIEW для таблицы Kafka, как рекомендовано в документации?

Если вы используете MATERIALIZED VIEW, тогда все сообщения от Kafka будут вставлены в представление. Поэтому в этом случае вы должны выбирать из представления, а не из таблицы Kafka.

Если вы не используете MATERIALIZED VIEW, вы можете запрашивать новые сообщения из таблицы kafka только один раз. При повторном запросе запрос не будет возвращать те же сообщения снова, потому что он уже использовался один раз из Kafka.

Если вам нужны агрегированные данные, используйте SummingMergeTree, как в примере. Если вы предпочитаете необработанные данные, вы можете использовать MergeTree.

Тип столбца отметки времени - Строка. Что это за формат? Я предлагаю вам проанализировать временную метку и вставить ее в Kafka как временную метку unix. Затем вам нужно воссоздать таблицу cpuinfo со столбцом timestamp с типом UInt64.

Если вы сделаете это, вы можете создать представление, используя следующие операторы:

CREATE TABLE cpuinfo_t (
  timestamp UInt64,
  namespace String, 
  data Float, 
  unit String, 
  plugin_running_on String, 
  version UInt64, 
  last_advertised_time String, 
  DAY Date) 
ENGINE = MergeTree 
PARTITION BY DAY 
ORDER BY (DAY, timestamp) SETTINGS index_granularity = 8192;

CREATE MATERIALIZED VIEW cpuinfo_view TO cpuinfo_t AS 
SELECT 
  timestamp, 
  namespace, 
  data, 
  unit, 
  plugin_running_on, 
  version, 
  last_advertised_time, 
  toDate(toDateTime(timestamp)) AS DAY 
FROM cpuinfo;
person Mikhail    schedule 25.01.2018
comment
спасибо за ответ .... я неправильно понял пример, который они дали в документе .... как я могу создать материализованное представление для вышеупомянутой таблицы cpuinfo, упомянутой в вопросе ... - person Rakshitha Kademane; 25.01.2018
comment
Гранулярность индекса определяет разреженность файлов первичных ключей. В примере, который я опубликовал, первичный ключ / индекс (DAY, timestamp). index_granularity = 8192 - рекомендуемое значение для большинства случаев. Вы можете узнать больше здесь: clickhouse.yandex/docs/en/development/ medium.com/@f1yegor/clickhouse-primary-keys-2cf2a45d7324 < / а> - person Mikhail; 29.01.2018
comment
спасибо .... так что теперь, если я начну собирать данные из kafka, и если я хочу увидеть эти данные в clickhouse, каким должен быть мой запрос `select * from cpuinfo_view` или из какой таблицы мне нужно это взять - person Rakshitha Kademane; 29.01.2018
comment
Да, вам следует выбрать из cpuinfo_view - person Mikhail; 29.01.2018
comment
но если я select * from cpuinfo_view ничего не получу ... но если select * from cpuinfo там я могу видеть данные ... как я могу увидеть данные в cpuinfo_view, которые будут сохранены - person Rakshitha Kademane; 29.01.2018
comment
У вас есть ошибки в журнале /var/log/clickhouse-server/clickhouse-server.log при публикации сообщения в Kafka? - person Mikhail; 29.01.2018
comment
2018.01.30 05:20:46.697449 [ 24 ] <Debug> StorageKafka (cpuinfo): Started streaming to 1 attached views 2018.01.30 05:20:46.697530 [ 24 ] <Trace> StorageKafka (cpuinfo): Creating formatted reader 2018.01.30 05:20:51.698192 [ 24 ] <Debug> StorageKafka (cpuinfo): Stopped streaming to views Отображается указанная выше ошибка - person Rakshitha Kademane; 30.01.2018
comment
Есть ли у вас другие сообщения в журнале, когда вы публикуете сообщение в Kafka? Вы также можете проверить clickhouse-server.err.log. Вы изменили тип временной метки на UInt64 для таблицы cpuinfo? Вы можете проверять типы с помощью этого запроса select table, name, type from system.columns where table in ('cpuinfo', 'cpuinfo_view') Если вы создаете таблицы и просматриваете, как описано, он должен работать правильно - person Mikhail; 30.01.2018
comment
Хорошо, теперь я изменил тип данных временной метки в cpuinfo на UInt64 ... но теперь я получаю сообщение об ошибке, поскольку Code: 72. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Unsigned type must not contain '-' symbol: (at row 1) Моя временная метка выглядит как 2018-01-31 09:53:02.005395253 +0530 IST - person Rakshitha Kademane; 31.01.2018
comment
мне нужно сделать метку времени в любом другом формате, например 20180131 09: 53: 02.0053952523 - person Rakshitha Kademane; 31.01.2018
comment
Если вы измените тип UInt64, вы должны отправить сообщение в Kafka с меткой времени как метка времени unix, а не как строка. - person Mikhail; 31.01.2018
comment
Если вы не можете изменить код, который вставляет сообщение в Kafka, тогда в таблице cpuinfo используйте timestamp String. В cpuinfo_t timestamp DateTime и создайте такой вид CREATE MATERIALIZED VIEW cpuinfo_view TO cpuinfo_t AS SELECT toDateTime(substring(timestamp, 1, 19)) AS timestamp, namespace, data, unit, plugin_running_on, version, last_advertised_time, toDate(timestamp) AS DAY FROM cpuinfo; - person Mikhail; 31.01.2018