2017-02-01 2 views
4

У меня есть данные, которые вставляются с именами хостов. Раздражающе я собираюсь изменить домен с .lan на .mydomain.comИзменить значение тега в InfluxDB

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

Могу ли я обновить определение тега от machine.lan до machine.mydomain.com?

+1

Раздражающе, InfluxDB не поддерживает некоторые базовые (для тех, кто приходит из SQL), такие как [обновление тегов] (https://github.com/influxdata/influxdb/issues/4157#issuecomment-354939104), [поиск NULL] (https://github.com/influxdata/docs.influxdata.com/issues/717), [обновления полей] (https://stackoverflow.com/questions/48070399/update-field-value-in-influxdb), [dropping fields] (https://github.com/influxdata/influxdb/issues/6150) или операторы типа [IN] (https://github.com/influxdata/influxdb/issues/2157). –

ответ

2

К сожалению, не существует способа изменить имена тегов для исторических данных в InfluxDB.

+0

Я посмотрел на попытку скопировать данные из одной таблицы в другую, указав новое имя тега вручную, но я тоже не мог этого сделать. – dcole

+0

Вы можете запросить все данные, вручную переименовать их, а затем переписать. –

+0

Дамп его в csv? Это возможно? И импорт? – dcole

1

В то время как ответ @ Майкла правилен тем, что вы не можете изменять значения тегов с помощью команд InfluxDB, однако вы можете написать клиентский скрипт, который может изменить значение тега, вставив в измерение "duplicate" точек с той же меткой времени, fieldset и taget, за исключением того, что искомый тег изменит его значение.

Точка с неправильным тегом (в формате Line Protocol):

cpu,hostname=machine.lan cpu=50 151497

После запуска

INSERT cpu,hostname=machine.mydomain.com cpu=50 151497

SELECT * FROM CPU будет включать в себя

cpu,hostname=machine.lan cpu=50 151497
cpu,hostname=machine.mydomain.com cpu=50 151497

После того как сценарий работает все INSERT, вам нужно будет отказаться от устаревшей серии очков со старым значением тега:

DROP SERIES FROM cpu WHERE hostname='machine.lan' 

Конечно, это крайне неэффективно (примечание, в частности, this bug), и если вам необходимо обновить значение тега another tag value that other points you don't want to drop already have, вы не можете просто DROP SERIES. Поэтому, пожалуйста, vote for InfluxDB to implement tag renaming и, в частности, изменение значений тегов на основе WHERE запросов. Или рассмотрите альтернативную базу данных временных рядов, которая позволяет использовать обычный SQL, например Timescale.