我想通过 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
答案 0 :(得分:0)
最简单的方法可能是在UpdateRecord
之后(如果需要保持微秒精度)或在ConvertRecord
之前(如果只需要毫秒精度)使用ConvertRecord
处理器修剪该字段的最后三位数。
您可以使用“记录路径”功能substringBeforeLast
通过substringBeforeLast(timestamp, '000')
进行修整。