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()是一种很好的方式与同事和社区分享数据。社区成员经常与我分享他们的带注释的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。
- 节省您的时间。您不需要收集认证参数即可使用array.from(),就像使用influx write一样。
如果您想了解更多背景信息,请查看这个问题#3077。如果您有其他产品反馈,我鼓励您在社区论坛中创建问题或分享它们。
问:我如何使用array.from()构建表格?答:导航到“探索”标签中的Flux脚本编辑器。搜索array.from()
并点击“注入”按钮。
选择“注入”将自动注入相应的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为所有函数注入注入管道向前运算符。然而,我们不需要管道向前运算符,因为我们不是在连接操作。如果您按原样提交,您将得到以下错误
compilation failed: error at @3:3-3:5: invalid statement: |>
请删除管道向前运算符以生成表格。array.from()函数使用以下键来构建您的表格列
_measurement
:此键对应于测量列;值必须为字符串。_field
:此键对应于字段列;值必须为字符串。_value
:此键对应于字段值列;值可以是字符串、浮点数或整数。_time
:此键对应于时间戳列;值是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()函数将所有数据写入一个表格。如果您写入具有不同标签、测量和字段的对象,所有数据仍然会位于一个表格中,就像已经应用了group()操作一样。
问:array.from()有何用途?我什么时候可以使用array.from()?答:array.from()函数可以在各种情况下使用。您可能想
- 构建新的临时数据以帮助您学习Flux。
- 生成用于特定任务的临时数据。
- 通过构建数据、将其写入桶并验证任务是否按预期运行来测试任务。
希望您觉得这个技术提示有用。如果您有任何问题或产品反馈,请在社区网站、Slack频道或通过推特@InfluxDB联系我们。谢谢!