TL;DR 技术提示 — 如何使用 Flux 构建表格

导航至

在这篇文章中,我们将分享如何使用 array.from() 函数,通过 Flux 从记录数组构建表格。Flux 是 InfluxData 的脚本和函数式查询语言。

本 TL;DR 假设您已经注册了 InfluxDB Cloud 账户 – 注册免费账户是开始使用 InfluxDB 的最简单方法 – 或者安装了 InfluxDB 2.0 OSS

问: 如何构造数据并将其写入 InfluxDB? 答: 用户可以使用以下选项来构造临时数据并将其写入 InfluxDB

  • 生成 行协议通过 UI 手动将其写入 InfluxDB。如果您不需要包含特定的时间戳,则通过 UI 将行协议数据写入 InfluxDB 非常容易。如果数据点在被数据库接收时未包含时间戳,InfluxDB 将使用其主机机器的当前系统时间 (UTC)。但是,如果您需要添加带有时间戳的数据,则需要包含基于纪元时间的 Unix 时间戳。这使得生成行协议数据有点困难 – 您很可能需要依赖 时间戳转换器
  • 复制并编辑 带注释的 CSV 并使用 csv.from() 函数将数据写入存储桶。不建议使用这种方法,因为编辑 CSV 可能很困难,并且容易出现人为错误。但是,将 CSV 导出 UI 功能 与 csv.from() 结合使用是与同事和社区共享数据的好方法。有 Flux 问题的 社区成员 经常与我分享他们的带注释的 CSV 数据。然后我可以使用 csv.from() 函数来帮助回答他们的 Flux 问题。
  • 使用 influx write 命令将任何 CSV 写入 InfluxDB。这是一个很棒的工具,但它假设您已经拥有 CSV 格式的数据。influx write 命令非常适合将大量现有 CSV 数据写入 InfluxDB。
  • 我们最近引入了一种新方法,array.from() 函数是一个 Flux 函数,允许您动态构建表格。

问: array.from() 函数是什么? 答: array.from() 函数是一个 Flux 函数,允许您从对象数组构建表格。创建 array.from() 函数是为了响应社区反馈。它通过以下方式解决了与某些替代方法相关的限制和障碍:

  • 允许您以人类可读的 RFC3339 时间戳格式(而不是纪元时间)写入带有时间戳的数据。
  • 通过对象列表可靠地构造数据,而不是手动编辑带注释的 CSV。
  • 节省您的时间。您不需要像使用 influx write 一样收集身份验证参数才能使用 array.from()。

如果您有兴趣了解更多背景信息,请查看此 issue #3077。如果您有任何其他产品反馈,我鼓励您创建 issue 或在 社区论坛 中分享。

问: 如何使用 array.from() 构建表格? 答: 导航到“Explore”选项卡中的 Flux 脚本编辑器。搜索 array.from() 并单击“Inject”按钮。

flux array.from function

选择“Inject”将自动注入相应的 Flux 和 Flux 包。默认示例是

import "experimental/array"
 
|> array.from(rows: [{_time: 2020-01-01T00:00:00Z, _value: "foo"},{_time: 2020-01-02T00:00:00Z, _value: "bar"}])

默认情况下,UI 会为所有函数注入注入 管道前向运算符。但是,我们不需要管道前向运算符,因为我们没有将操作链接在一起。如果您按“Submit”原样提交,您将收到以下错误

compilation failed: error at @3:3-3:5: invalid statement: |>

请删除管道前向运算符以生成表格。array.from() 函数使用以下键在您的表格中构建列

  • _measurement:此键对应于 measurement 列;值必须是字符串。
  • _field:此键对应于 field 列;值必须是字符串。
  • _value:此键对应于 field value 列;值可以是字符串、浮点数或整数。
  • _time:此键对应于 timestamp 列;值采用 RFC3339 时间戳格式
  • 标签集 列可以给定任何键名;值必须是字符串。

这是一个带有附加键的示例

import "experimental/array"
array.from(rows: [{_measurement: "m0", mytag: "t0", _field: "f0", _value: "foo", _time: 2020-01-01T00:00:00Z,},
{_measurement: "m0", mytag: "t0", _field: "f0", _value: "bar", _time: 2020-01-02T00:00:00Z}])

此 Flux 脚本产生以下结果

construct table flux

这是以表格形式可视化的相同结果,使用了 表格可视化

Flux table visualization

使用 to() 函数将您构建的表格写入 存储桶

重要提示:array.from() 函数将所有数据写入一个表格。如果您写入具有不同标签、measurement 和 field 的对象,所有数据仍将在一个表格中,就像对您的数据应用了 group() 一样。

问: array.from() 有什么用?我什么时候可以使用 array.from()? 答: array.from() 函数可以在多种情况下使用。您可能想要

我希望您觉得这个技术提示有用。如果您有任何问题或产品反馈,请将它们发布在社区站点Slack 频道或在 Twitter 上 @InfluxDB 告诉我们。谢谢!