2

我在进行SELECT INTO查询时无法理解如何向数据系列添加标签。我有一个 NYTimes COVID 数据集的 Influxdb,其中我使用了casesanddeaths字段fieldsstateandcounty信息作为标签。

我可以在这样的查询中汇总来自邻近县的数据:

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类型语句中附加标签的信息。

4

1 回答 1

1

您可以使用TICKscript 语言轻松获得所需的功能,该语言是 TICK 堆栈中 InfluxDB 的补充部分。然而,除了 InfluxDB 本身之外,这还需要使用KapacitorChronograf 。

Kapacitor 将执行用 TICKscript 语言编写的任务来操作数据。Chronograf 提供了一个 Web UI 来配置 InfluxDB 和 Kapacitor。

从您的问题中查找 InfluxQL 查询的 TICKscript 任务示例:

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-> Alerting tab -> Manage tasks -> TICKscripts 部分中的“+Write TICKscript”按钮。

要获得完整的 TICKstack 环境,您可以在 docker 上使用官方沙箱

于 2020-04-09T21:34:04.590 回答