Как исправить несовместимые типы в InfluxDB? - PullRequest
0 голосов
/ 03 июля 2018

В InfluxDB (1.5) у меня есть таблица, в которой поля стали непоследовательными. Большинство строк в таблице являются целочисленными, однако некоторые строки стали строками.

  1. Как это возможно? Я думал, что после того, как будут установлены типы полей (после первой вставки), любая вставка в таблицу с неправильной типизацией завершится неудачей.

  2. Что мне теперь делать? Если я вернусь и попытаюсь перезаписать данные в несогласованных строках, я получу сообщение о том, что поле является строкой.

1 Ответ

0 голосов
/ 05 июля 2018

После еще одного исследования, вот что я обнаружил:

Ответ на часть 1:

InfluxDB использует систему, которую они называют «шардингом» - хотя я не знаю специфики, я знаю, что данные из одного измерения / таблицы могут храниться в нескольких разных «шардах».

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

Ответ на часть 2:

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

Если у вас есть тег, который изменил тип и стал полем, это может быть особенно трудно исправить, ссылка выше не решает эту проблему. Чтобы делать выборки только по тегу или полю, вы можете использовать tag_name::tag или field_name::field в операторе выбора.

Предложение GROUP BY *, предложенное в ссылке, требуется для сохранения тегов, но, похоже, вызывало проблемы при его использовании.

Мое текущее решение - это PHP-скрипт, который использует curl, загружает точки, разбивает их на части, затем повторно вставляет точки в новую таблицу, гарантируя, что каждая вставляемая точка приведена к новому унифицированному типу и правильно вставлена .

Лучший способ остановить будущие проблемы - просто не иметь их. Я искал, как во всех случаях блокировать типы полей для всех сегментов для конкретной таблицы измерений.

К сожалению, кажется невозможным гарантировать 100% согласованность типов для всех текущих и будущих сегментов. «Не делайте ошибок, потому что это действительно трудно очистить», похоже, является способом работы InfluxDB.

...