潍坊网站建设套餐,网站域名代备案,注册网站安全吗,做生意的网站背景 Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。 在我们通过flink写入parquet文件的时候,会遇到timestamp时间格式写入的问题。…背景 
ApacheParquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。 在我们通过flink写入parquet文件的时候,会遇到timestamp时间格式写入的问题。flink官方sdk提供的avro定义转换为parquet文件字段定义是没有timestamp类型的,得另找方法解决。 
parquet的时间字段 parquet字段定义存在如下几种类型: 
BOOLEAN: 1 bit booleanINT32: 32 bit signed intsINT64: 64 bit signed intsINT96: 96 bit signed intsFLOAT: IEEE 32-bit floating point valuesDOUBLE: IEEE 64-bit floating point valuesBYTE_ARRAY: 任意长度 byte 数组其中timestamp使用int96类型进行存储,只有使用int96按照指定格式存储时间格式,我们才可以通过hive,sparksql等计算引擎读取正确的时间数据。 
flink2parquet flink官方提供的写入parquet的处理方式如下: String avroSchema = "";//构建parquet格式定义Schema schema = new Schema.Parser().parse(avroSchema);BulkWriter.FactoryGenericRecord writerFactory = ParquetAvroWriters.forGenericRecord(schema);org.apache.flink.connector.file.sink.FileSink fileSink = org.apache.flink.connector.file.sink.FileSink.forBulkFormat(new org.apache.flink.core.fs.Path("hdfs://xxxxx/xx/xx"), writerFactory).withRollingPolicy(OnCheckpointRollingPolicy.build()).build();datastream.sin