Добавление тега к агрегированным данным в influenxdb - PullRequest
2 голосов
/ 03 апреля 2020

У меня проблемы с пониманием того, как добавить теги в ряд данных при выполнении SELECT INTO запросов. У меня есть Influxdb набора данных NYTimes COVID , где я использовал поля cases и deaths в качестве fields и информацию state и county в качестве тегов.

Я могу объединять данные из соседних округов в запросе, подобном этому:

SELECT sum("cases") AS "cases" FROM "ny_covid"."autogen"."value" WHERE ("state"='Pennsylvania') AND ("county"='Philadelphia' OR "county"='Delaware') GROUP BY time(1d) FILL(null)

Это работает отлично. Но я хочу сохранить эти агрегированные данные в новую базу данных для выполнения других запросов. Что я могу сделать так:

SELECT sum("cases") AS "cases" INTO "new_covid"."autogen"."value" FROM "ny_covid"."autogen"."value" WHERE ("state"='Pennsylvania') AND ("county"='Philadelphia' OR "county"='Delaware') GROUP BY time(1d) FILL(null)

Мой вопрос: как добавить тег типа location=Philly к данным, которые я только что вставил в базу данных new_covid? Потому что я хотел бы сделать несколько других агрегаций на уровне местоположения, и кажется, что tag - это способ сохранить эти значения различными.

SELECT sum("cases") AS "cases" INTO "new_covid"."autogen"."value" FROM "ny_covid"."autogen"."value" WHERE ("state"='Pennsylvania') AND ("county"='Dauphin' OR "county"='Lancaster') GROUP BY time(1d) FILL(null)

Весь поиск, который я сделал, только было об использовании тегов в запросах или их сохранении при копировании по базам данных. Но я не смог найти ничего о прикреплении тегов в операторах типа SELECT INTO.

1 Ответ

1 голос
/ 10 апреля 2020

Вы можете легко получить необходимую функциональность, используя язык TICKscript , который является бесплатной частью InfluxDB в стеке TICK. Однако для этого необходимо использовать Kapacitor и Chronograf в дополнение к самой InfluxDB.

Kapacitor будет выполнять задачи, написанные на языке TICKscript, для манипулирования данными. Chronograf предоставляет веб-интерфейс для настройки InfluxDB и Kapacitor.

Найдите пример задачи TICKscript для запросов InfluxQL из вашего вопроса:

var b1 = batch
    |query('''
    SELECT sum("cases") AS "cases" 
    FROM "ny_covid"."autogen"."value" 
    WHERE ("state"='Pennsylvania') AND ("county"='Philadelphia' OR "county"='Delaware') )
    ''')
        .offset(1d)
        .period(1d)
        .cron('@midnight')
        .groupBy(time(1d))
    // Write the transformed data to InfluxDB
    |influxDBOut()
        .database('new_covid')
        .retentionPolicy('autogen')
        .measurement('value')
        .tag('location', 'Philly')

var b2 = batch
    |query('''
    SELECT sum("cases") AS "cases" 
    FROM "ny_covid"."autogen"."value" 
    WHERE ("state"='Pennsylvania') AND ("county"='Dauphin' OR "county"='Lancaster')
    ''')
        .offset(1d)
        .period(1d)
        .cron('@midnight')
        .groupBy(time(1d))
    // Write the transformed data to InfluxDB
    |influxDBOut()
        .database('new_covid')
        .retentionPolicy('autogen')
        .measurement('value')
        .tag('location', 'Dauphy')

Кроме того, это не единственный способ получить такой результат. Также вы можете изучить stream подход вместо batch, использованного выше.

Все, что вам нужно для запуска этого кода, это создать новую задачу для kapacitor:

Chronograf-> вкладка «Предупреждения» -> «Управление задачами» -> кнопка «+ Write TICKscript» в разделе TICKscripts.

Чтобы получить полную среду TICKstack, вы можете использовать служебную песочницу на докерах

...