我是大数据和相关技术的新手,所以我不确定我们是否可以将数据附加到现有的ORC文件中。我正在使用Java API编写ORC文件,当我关闭Writer时,我无法再次打开文件来向其写入新内容,基本上是为了追加新数据。
有没有办法可以使用Java Api或Hive或任何其他方法将数据附加到现有的ORC文件?
还有一点澄清,当将Java util.Date
对象保存到ORC文件中时,ORC类型存储为:
struct<timestamp:struct<fasttime:bigint,cdate:struct<cachedyear:int,cachedfixeddatejan1:bigint,cachedfixeddatenextjan1:bigint>>,
对于java BigDecimal,它是:
<margin:struct<intval:struct<signum:int,mag:struct<>,bitcount:int,bitlength:int,lowestsetbit:int,firstnonzerointnum:int>
这些是正确的,有没有这方面的信息?
不,您不能直接附加到ORC文件。也不是Parquet文件。也没有任何具有复杂内部结构的列式格式,其中元数据与数据交错。
引用官方的“Apache Parquet”网站......
在数据之后写入元数据以允许单遍写入。
然后引用官方的“Apache ORC”网站......
由于HDFS不支持在写入文件后更改文件中的数据,因此ORC将顶级索引存储在文件的末尾(...)文件的尾部由3部分组成;文件元数据,文件页脚和postscript。
嗯,从技术上讲,现在你可以附加到HDFS文件;你甚至可以截断它。但是这些技巧仅对某些边缘情况有用(例如,Flume将消息馈送到HDFS“日志文件”,微批量,不时使用fflush
)。
对于Hive事务支持,他们使用不同的技巧:在每个事务(即微批处理)上创建一个新的ORC文件,并在后台运行定期压缩作业,即HBase。
是的,这可以通过Hive实现,您可以在其中基本上“连接”更新的数据。从蜂巢官方文档https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-WhatisACIDandwhyshouldyouuseit?