如何解析日期字段并在 NiFi 中以字符串格式生成日期

ilo*_*arn 3 apache-nifi

我的每个流文件都包含 2000 条记录。我想将 01/01/2000 解析为列年 = 2000,列月 = Jan 和列日 = 01

即输入列 01/01/2000 分成 3 个以逗号分隔的值 01,Jan,2000

Bry*_*nde 6

假设您有一个这样的架构,供一个生日的人使用,并且您想拆分生日:

{
  "name": "person",
  "namespace": "nifi",
  "type": "record",
  "fields": [
    { "name": "first_name", "type": "string" },
    { "name": "last_name", "type": "string" },
    { "name": "birthday", "type": "string" }
  ]
}
Run Code Online (Sandbox Code Playgroud)

您需要修改架构,使其具有您要添加的字段:

{
  "name": "person",
  "namespace": "nifi",
  "type": "record",
  "fields": [
    { "name": "first_name", "type": "string" },
    { "name": "last_name", "type": "string" },
    { "name": "birthday", "type": "string" },
    { "name": "birthday_year", "type": ["null", "string"] },
    { "name": "birthday_month", "type": ["null", "string"] },
    { "name": "birthday_day", "type": ["null", "string"] }
  ]
}
Run Code Online (Sandbox Code Playgroud)

假设输入记录具有以下文本:

bryan,bende,1980-01-01
Run Code Online (Sandbox Code Playgroud)

我们可以将 UpdateRecord 与 CsvReader 和 CsvWriter 一起使用,UpdateRecord 可以通过解析原始生日字段来填充我们想要的三个字段。

在此处输入图片说明

如果我们将输出发送到 LogAttribute,我们现在应该看到以下内容:

first_name,last_name,birthday,birthday_year,birthday_month,birthday_day
bryan,bende,1980-01-01,1980,01,01
Run Code Online (Sandbox Code Playgroud)

以下是记录路径指南的链接,了解有关 toDate 和格式函数的详细信息:

https://nifi.apache.org/docs/nifi-docs/html/record-path-guide.html