search
DataFlux.f(x) FAQ

FAQ

为什么使用Python作为脚本语言?

首先,Python这门语言较为简单易上手。其次,DataFlux主要处理的数据为监控等时序数据,同时Python生态已经大量存在了专业的数学、机器学习等第三方库,可以方便地满足业务需要。

为什么选用Python 3.7版本?

首先,Python 2.x版本已于2020年1月1日停止维护,Python 3.x是大势所趋。其次,Python 3.7版本为目前的稳定版本,各第三方库对3.7的支持也最全面。

为什么只允许使用特定的Python库?

主要出于安全性的考虑,一些涉及系统的库的不当使用可能导致损害系统,因此使用白名单制限制可用的Python库

我能选择不同的Python版本来运行脚本吗?

不可以,DataFlux.f(x)是服务端应用,且为了性能,并没有使用虚拟化技术来运行用户脚本,因此用户脚本都运行在Python 3.7环境下

我能够修改官方提供的脚本吗?

不可以,官方脚本受到保护,不允许修改。如需要,可以编写新的函数调用官方脚本中的函数。

如何保证官方脚本未被篡改?

首先官方脚本包加入了数字签名,只有驻云官方发布的官方脚本包才能够被认证通过并导入到DataFlux.f(x)中。其次,已经在脚本库中的官方脚本也不允许修改。

我可以使用哪些Python内置库或第三方库?

可用的Python内置库有:

  • base64
  • collections
  • datetime
  • dns
  • hashlib
  • itertools
  • json
  • math
  • random
  • re
  • time
  • uuid
  • pprint
  • wraps 可用的第三方库有:
  • six(v1.12.0)
  • arrow(v0.13.0)
  • requests(v2.21.0)
  • simplejson(v3.16.0)
  • ujson(v1.35)
  • xmltodict(v0.9.2)
  • PyYAML(v4.2b2)
  • numpy(v1.18.1)
  • pandas(v0.25.3)
  • scipy(v1.3.3)
  • scikit-learn(v0.22.1)
  • statsmodels(v0.11.0)
  • fbprophet(v0.5)
  • eas-prediction(v0.12)

我需要的Python库不在可用列表中,怎么办?

由于可用的Python库采用白名单制,额外增加可用库只能联系DataFlux官方说明需要的库,并在下一个版本更新后可用。

为什么InfluxDB无法使用JOIN功能?

与传统的关系型数据库不同,InfluxDB是时序数据库,并不是关系型数据库,因此不具备JOIN功能。而大多数情况下对时序数据库的查询也不应该存在JOIN操作,必要时请重新评审需求是否合理。

此外,特定情况下,您可以在脚本代码中自行实现类似JOIN的联合查询。

为什么InfluxDB无法在某些字段上进行COUNT()处理?

与MySQL不同,InfluxDB的COUNT()函数处理对象是字段field而非标签tag

DataFlux.f(x)的性能如何?

很大程度上与函数处理内容有关,过分复杂的处理必然拖慢系统。

按照DataFlux官方基准测试,单个Pod执行Hello World函数的性能大概在200次/秒左右。

可以根据需要,调整DataFlux.f(x)部署的Pod数量。

函数执行时间过长会怎么样?

按照规范,一个会在DataFlux Studio被调用的函数建议执行时间为3秒以内,以确保UI界面操作的连贯性。

但DataFlux.f(x)最长允许一个函数执行30秒。超过此时长,执行进程会被强制停止。

脚本调试阶段执行了慢查询,是否会对系统有影响?

DataFlux.f(x)调试执行与正式被API调用执行分属两个不同的执行单元,本身不会相互影响。但执行慢查询的数据源会收到影响。

可以在脚本中使用类、装饰器吗?

可以,类和装饰器的使用与原版Python没有任何区别。

可以从DataFlux.f(x)连接到已有业务系统的数据库吗?

可以,但需要保证DataFlux.f(x)能够连通业务系统的数据库。

此外,为了避免可能存在的慢查询影响线上业务系统,建议对业务系统数据库做读写分离,并让DataFlux.f(x)连接到读库上。

我不想暴露业务系统数据库,可以通过API方式访问吗?

可以,DataFlux.f(x)本身可以向外发送HTTP请求,可以满足需求。

DataFlux.f(x)如何控制函数被调用的权限?

DataFlux.f(x)本身不提供权限系统,编写的函数默认只能在集群内部被DataFlux Studio调用。只有创建的授权链接才能被外网调用。

授权链接可以设置限流,也可以随时禁用。因此暴露函数时,只需要控制授权链接即可。

脚本的运行环境是否绝对安全?

不是绝对安全,Python是动态脚本语言,虽然DataFlux.f(x)已经做了一定限制,但无法100%杜绝猴子补丁等越狱手段。

因此请勿将DataFlux.f(x)的访问权限交给不可信任的第三方使用。   数据源是否绝对安全? 无法保证,由于函数可以由用户自行编写,因此类似SQL注入等问题依然需要脚本编写者注意规避。

DataFlux.f(x)的数据源操作对象支持防止SQL注入的传参功能,请勿手工在SQL语句中手工拼接外部输入的参数。

因此,除非有特定业务需求,数据源建议使用只读库、只读用户、在数据库中为用户指定明确的权限等方式减少安全隐患。

业务系统所用的数据库没有支持,怎么办?

您可以联系DataFlux官方告知您所需要支持的数据库,我们尽快加入新的支持。此外,您也可以在业务系统开放API的方式向DataFlux.f(x)提供数据。

我在使用时遇到了问题,应该怎么办?

如果是DataFlux.f(x)本身的故障,请联系DataFlux官方反馈问题。

如果是使用方面的疑问,请先阅读相关文档。如依然无法解决问题,请联系DataFlux官方反馈问题。

我需要专业的预测、机器学习功能,但本身不具备自行实现的条件,应该怎么办?

场景实施本身就是DataFlux的一项服务,请立刻联系DataFlux官方进行洽谈。

我可以将自己编写的脚本分发给其他人吗?

可以,DataFlux.f(x)并不会限制用户代码的分发。

我无法通过API调用函数,我什么?

无法调用函数的问题有很多种

  • 请求返回4xx或5xx:网络正常,错误原因请参考返回内容。大多数情况为函数本身的问题。
  • 请求超时,服务器无响应:网络不通,这并不是DataFlux.f(x)的问题,请检查自身网络、代理等配置是否正确。
  • 请求返回未登录或需要登录:您可能尝试直接调用了函数而不是调用授权链接。根据DataFlux.f(x)要求,从集群外部调用函数必须使用授权链接调用

通过API调用函数返回了JSON字符串,但HTTP请求头中没有Content-Type: application/json,为什么?

您所调用的函数可能直接返回了序列化后的JSON字符串。当函数返回JSON数据时,请直接返回整个dict对象,不需要手动进行序列化操作。

我正在编写InfluxDB的查询语句,但是我不清楚数据库、指标、标签有哪些,应该怎么办?

InfluxDB中的数据与上报至DataWay的数据直接关联,DataFlux.f(x)本身并不参与存储处理。

您可以具有后台管理权限的负责人询问工作空间对应的数据库;向实施上报数据的负责人询问相关指标、标签或字段意义。

您也可以使用数据源的「简易调试面板」来浏览所有的数据库、保留策略、指标、指标下的标签、字段。

脚本集、脚本的引用名,函数名长度有限制吗?

有,脚本集、脚本的引用名最长128个字符,函数名最长256个字符,超过的可能导致函数无法正常通过API被调用。

我为我的函数编写了装饰器,参数为使用*args, **kwargs,为什么无法从args中获取到参数?

为了方便函数在Web页面调用,在通过API调用函数时,参数都会以命名参数方式传递(即**kwargs方式),因此无法在args中获取到参数。请使用kwargs.get()方式以参数名获取参数。

此外,DataFlux.f(x)反对在对外暴露的函数上使用*args, **kwargs特性。这样做会导致前端Web无法得知函数具体需要的参数列表。

我是否能够在脚本中使用全局变量?

可以,但仅限只读方式访问定义的全局变量。由于每次函数运行都会初始化执行上下文,因此函数中对全局变量的修改,不会保留到下次函数执行。

DataFlux.f(x)是否是Flink、Hadoop等的替代品?

不是,DataFlux.f(x)是DataFlux产品的一个组成部分,与目前市面上的大数据处理系统没有什么特定的关系,仅仅是功能上有共同点。

使用DataFlux.f(x)应当按照DataFlux产品本身的逻辑使用,而不是简单替换已有的系统。