在Apache NiFi中解析微秒

时间:2019-03-06 15:07:07

标签: apache-nifi

我想通过 CSVRecordReader 将以下包含微秒级时间戳的CSV内容通过 AvroRecordSetWriter 转换为AvroRecord:

timestamp,value    
1551784149996000,1

我正在使用以下Avro模式:

{
  "name": "TestRecord",
  "type": "record",
  "fields": [
    {
      "name": "timestamp",
      "type" :
      {
        "type" : "long",
        "logicalType" : "timestamp-micros"
      }
    },
    {
      "name": "value",
      "type": "long"
    }
  ]
}

但是 CSVRecordReader 似乎将微秒解释为毫秒,因此AvorRecordSetWriter的输出还包含三个零:

1551784750036000000
  

时间戳字段将假定为毫秒数,因为   时代(格林尼治标准时间1970年1月1日午夜)   https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-record-serialization-services-nar/1.9.0/org.apache.nifi.csv.CSVReader/index.html

如何使用这种模式在NiFi中解析微秒并将其转换为Avro或Parquet?

NiFi RecordReader可能以某种方式支持以下即时ISO格式吗?

2019-03-01T13:12:34.567123Z

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是在UpdateRecord之后(如果需要保持微秒精度)或在ConvertRecord之前(如果只需要毫秒精度)使用ConvertRecord处理器修剪该字段的最后三位数。

您可以使用“记录路径”功能substringBeforeLast通过substringBeforeLast(timestamp, '000')进行修整。