我想创建Parquet文件,其记录是Thrift结构,所有字段都是optional
。
假设我创建了一个文件my_file.parquet
,其字段为struct Bar { ... }
。现在,假设我通过删除一个字段并添加另一个字段来更改Bar
。当我尝试使用更新的my_file.parquet
架构阅读Bar
时会发生什么?
我假设Parquet在阅读时会跳过从Bar
删除的字段?
如果我尝试阅读已添加的字段,我会获得null
吗?
任何帮助将不胜感激。我在文档中找不到这个。谢谢
答案 0 :(得分:0)
以下是Thrift所做的,所以它不是Parquet特有的。
如果它是可选的(或“默认”),则删除该字段不应该带来任何问题。在反序列化数据时,将跳过并忽略内容。
与添加新的可选字段相同。它是可选的,它不在旧数据中,因此根据期望我们在反序列化后得到一个未设置的字段。
最佳做法是说,您不应该删除该字段,而是评论。这可以防止您和其他人稍后意外重用过时的字段ID。这是一件坏事。
我们在做的时候:在做任何事情之前要三思而后required
。因为required
是永远的。
强烈推荐的讲座,对该主题有一些更深入的解释:Diwaker Gupta's great "Missing Guide"