使用 InfluxDB University 的技巧创建自定义函数
作者:Susannah Brodnitz / 产品, 开发者
2022 年 9 月 28 日
导航至
Flux 是 InfluxDB 的函数式数据脚本语言。它旨在查询、处理、分析和处理数据。它非常强大,并且是为时间序列构建和优化的。Flux 的功能非常强大,以至于可能很难知道从哪里开始。今年八月,InfluxDB University 推出了一个免费的 中级 Flux 课程,由专家授课,可以提升您的 Flux 技能。它包括关于窗口函数、移动平均线、自定义函数、连接数据流以及创建任务和警报的课程和实践练习。在这篇文章中,我们将探讨自定义函数。
Flux 背景
Flux 查询执行四个基本操作。它们检索数据、根据时间或列值对其进行过滤、处理和塑造数据,并返回结果。您还可以使用 Flux 创建任务,即计划在指定间隔运行的脚本,这对于自动化降采样和分析非常有用。最初设计 Flux 时考虑了几个重要因素。它旨在简单易学,并且易于开发人员阅读。查询是代码,您可以对其运行测试以查找和纠正错误。另一个关键方面是开源贡献的重要性。Flux 的构建也具有可组合性,因此开发人员可以在 Flux 上构建自己的函数和库,以使其适应其应用程序。Flux 中包含许多内置函数,从简单的均值到复杂的地理空间计算。但是开发人员和公司有独特的需求,而 Flux 允许自定义函数的灵活性是其优势之一。
自定义函数示例
当您需要执行的操作(通常在代码中重复执行)未包含在 Flux 的内置函数中时,自定义函数非常有用。它可能是一个非常复杂的计算,也可能是一个简单的操作,例如将摄氏度转换为华氏度。创建自定义函数可以节省时间,因为您不必重复键入计算,使代码更易于阅读,并使调试更简单。在这里,我们将介绍使用基本平方计算的自定义函数的语法。
基本自定义函数的语法是
[function name] = ([variable]) => [implementation]
例如
squared = (x) => x*x
定义自定义函数后,您可以在 Flux 脚本中使用它,例如
from(bucket: “foo”)
|> range(start: -1hr)
|> filter(fn: (r) => r._measurement == “samples”)
|> map(fn: (r) => ({ _value: squared(x: r._value)}))
|> filter(fn: (r) => r._value > 23.2)
在上面的示例中,自定义函数在 map() 函数中使用,以对所有 _value 输入行进行平方。
您还可以在 Flux 中编写自定义管道转发函数。这些函数可以与其他运算符直接管道化在一起,而不是像上面的 map() 函数中的 squared() 函数那样嵌套在其他函数中。在函数体中,您可以使用标准的 Flux 语法。
自定义管道转发函数的语法是
[function name] = ([table]="-,[variable]) => [table] |" [implementation]
要编写一个自定义函数来对表中的每个值(而不是一次一个变量)进行平方,您可以编写
allSquared = (tables="-) => tables |" map(fn: (r) => squared(r._value))
您可以在脚本中使用此函数,例如
from(bucket: “foo”)
|> range(start: -1hr)
|> filter(fn: (r) => r._measurement == “samples”)
|> allSquared()
|> filter(fn: (r) => r._value > 23.2)
在此示例中,函数体中使用的变量留空,它对所有变量进行操作。管道转发函数使代码清晰,易于阅读,并且更易于长期维护。
成为 Flux 专家
InfluxDB University 自定进度的课程 中级 Flux 包含更多信息和练习,探讨自定义函数、条件表达式、连接时间流等。
如果您完成了 InfluxDB University 上的初级 Flux 和中级 Flux 课程,您将有资格赢得 11 月 8 日至 9 日在伦敦举行的高级 Flux 培训的免费活动门票。此现场培训面向数据工程师,涵盖高级主题,例如识别相关性、处理季节性和预测时间序列。您可以获取更多信息并点击此处免费票务竞赛。