使用 InfluxDB 大学技巧创建自定义函数

导航至

Flux 是 InfluxDB 的函数式数据处理脚本语言。它用于查询、处理、分析和操作数据。它非常强大,专为时序数据处理而构建和优化。Flux 可以做很多事情,但要找到起点可能有点困难。今年八月,InfluxDB 大学 开设了一门由专家授课的免费 中级 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 大学自定步速课程中级 Flux提供了更多信息和练习,探索自定义函数、条件表达式、连接时间流等。

如果您完成了 InfluxDB 大学的入门 Flux中级 Flux课程,您就有资格获得11月8-9日在伦敦举行的高级 Flux 培训的免费入场券。这次现场培训面向数据工程师,涵盖识别相关性、处理季节性和预测时间序列等高级主题。您可以在此处获取更多信息并参加抽奖免费入场券

Flux Giveaway social tile