TL;DR 技术提示 — 如何使用 Flux 构建表格
作者:Anais Dotis-Georgiou / 产品, 用例, 开发者
2020 年 8 月 18 日
导航至
在这篇文章中,我们将分享如何使用 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”按钮。
选择“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 脚本产生以下结果
这是以表格形式可视化的相同结果,使用了 表格可视化
重要提示:array.from() 函数将所有数据写入一个表格。如果您写入具有不同标签、measurement 和 field 的对象,所有数据仍将在一个表格中,就像对您的数据应用了 group() 一样。
问: array.from() 有什么用?我什么时候可以使用 array.from()? 答: array.from() 函数可以在多种情况下使用。您可能想要
- 构建新的临时数据以帮助您学习 Flux。
- 为专门任务生成临时数据
- 通过构造数据、将其写入存储桶并验证您的任务是否按预期运行来测试 任务。
我希望您觉得这个技术提示有用。如果您有任何问题或产品反馈,请将它们发布在社区站点、Slack 频道或在 Twitter 上 @InfluxDB 告诉我们。谢谢!