文件(File)
流 扫描表
NeuronEX 数据处理模块通过
File
类型的数据源,可以接收来自文件的数据。File 类型可以作为流、扫描表的数据源,支持监控文件或文件夹。当监控对象为文件夹时,NeuronEX 会按照文件名的字母顺序来读取文件。
TIP
如果被监控的位置是一个文件夹,该文件夹内的文件类型必须相同。
支持的 File 类型:
-
json:标准的JSON数组格式文件。如果文件格式是一个以行分隔的JSON字符串,它需要以
lines
格式定义 - csv:支持逗号分隔的 csv 文件,也支持自定义分隔符
-
lines:以行分隔的文件。每行的解码方法可以通过流定义中的
format
参数来定义。例如,对于一个按行分隔的 JSON 字符串文件,文件类型应设置为lines
,格式应设置为json
,表示单行的格式为 JSON。 - cime:一种电力系统模型和数据的文件格式。
有些文件可能有大部分数据是标准格式,但在文件的开头和结尾行有一些元数据。用户可以使用
文件开头忽略的行数
(
ignoreStartLines
) 和 文件结尾忽略的行数 (
ignoreEndLines
) 参数来删除非标准的开头和结尾的非标准部分,以便解析上述文件类型。
创建流
登录 NeuronEX,点击 数据处理 -> 源管理 。在 流管理 页签,点击 创建流 。
在弹出的 源管理 / 创建 页面,进入如下配置:
-
流名称 :输入流名称
-
是否为带结构的流 :勾选确认是否为带结构的流,如为带结构的流,则需进一步添加流字段。可默认不勾选。
-
流类型 :选择 file。
-
数据源 :指定文件或目录的相对地址。注:请输入不含路径的文件名,例如
my.json
。 -
配置组 :可使用默认配置组,如希望自定义配置组,可点击添加配置组按钮,在弹出的对话框中进行如下设置,设置完成后,可点击 测试连接 进行测试:
- 名称 :必填项,输入配置组名称。
- 文件类型 :定义了文件的类型,可以是 json、csv 或 lines。
-
文件夹路径
:必填项,文件所在文件夹的路径。但这里不应包含文件名,文件名应数据源字段中定义。例如
data/uploads
- 间隔时间 :读取文件的时间间隔,单位为毫秒。如果设置为 0,则只读取一次。
- 发送间隔 :事件发送的时间间隔,单位为毫秒。
- 读取后动作 :文件读取后的操作。可以选择 0(保留文件)、1(删除文件)或 2(移动文件到另一个位置)。
- 移动位置 :如果读取后动作设置为 2(移动文件),在此处定义了文件移动到的目标位置。
- 是否包含头文件 :对于csv文件,定义是否有文件头。如果设置为 True ,那么文件的第一行将被解析为文件头。
- 字段列表 :在这里定义文件的列,如果定义了文件头,将覆盖此处的设置。
- 文件开头忽略的行数 :忽略文件开头的几行。例如,如果设置为 3,那么文件的前三行将被忽略。
- 文件结尾忽略的行数 : 忽略文件结尾的几行。注意,文件的最后空行不计算在内。
-
流格式 :支持 json、binary、protobuf、delimited、custom。
-
共享 :勾选确认是否共享源。
创建扫描表
File 源支持扫描表。登录 NeuronEX,点击 数据处理 -> 源管理 。在 扫描表 页签,点击 创建扫描表 。
- 表名称 :输入表名称
- 是否为带结构的表 :勾选确认是否为带结构的表,如为带结构的表,则需进一步添加表字段。可默认不勾选。
- 表类型 :选择 file。
- 数据源 :指定文件或目录的相对地址。注:请输入不含路径的文件名,例如 test.json。
- 配置组 :可使用默认配置组,如希望自定义配置组,可参考 创建流 部分
- 表格式 :支持 json、binary、delimited、custom。
- 保留大小 :指定表快照的大小,用于存储历史数据。
示例
文件源涉及对文件内容的解析,同时解析格式与数据流中的格式定义相关。我们用一些例子来描述如何结合文件类型和格式设置来解析文件源。
读取自定义分隔符的 CSV 文件
标准的 csv 文件,分隔符是一个逗号,但是有大量的文件使用类 csv 格式,但使用自定义的分隔符。另外,一些类 csv 的文件在第一行定义了列名,而不是数据,如下例所示。
该文件第一行为文件头,定义了文件的列名。读取这样的文件时,配置文件如下,需要指定文件有一个头。
在流定义中,将流数据设置为
DELIMITED
格式,用
DELIMITER
参数指定分隔符为空格。
通过以上命令,我们创建了一个名为 file1 的流,该流将从 abc.csv 文件中读取数据,预期分隔符为空格。
注意
在分隔符配置项中,需要输入空格。
读取多行 JSON 数据
对于一个标准的 JSON 文件,整个文件应该是一个 JSON 对象或一个数组。在实践中,我们经常需要解析包含多个 JSON 对象的文件。这些文件实际上本身不是合法的 JSON 格式,但每行都是合法的 JSON 格式,可认为是多行JSON数据。