我是ORC文件的新手。我经历了很多博客,但没有得到明确的理解。请帮助并澄清以下问题。
我可以从ORC文件中获取架构吗?我知道在Avro中,架构可以获取。
它实际上如何提供架构演变?我知道可以添加几列。但是怎么做。我唯一知道的,创建orc文件是将数据加载到以orc格式存储数据的hive表中。
ORC文件索引的工作原理是什么?我所知道的是每个条带索引都会被维护。但是由于文件没有排序,它如何帮助查找条带列表中的数据。在查找数据时如何帮助跳过条纹?
是否为每列维护索引。如果是,那么它是否会消耗更多内存?
柱状格式ORC文件如何适合hive表,其中每列的值存储在一起。而hive表是按记录获取记录的。两者如何结合在一起?
答案 0 :(得分:3)
1。和 2。使用Hive和/或HCatalog在Hive Metastore 中创建,读取,更新ORC表结构(HCatalog只是一个方面门比启用Pig / Sqoop / Spark /无论是直接访问Metastore还是
2。 ALTER TABLE
命令允许添加/删除列,无论存储类型是什么,包括ORC。但要注意讨厌的错误,这可能会导致之后的矢量化读取崩溃(至少在V0.13和V0.14中)
3。和 4。术语"索引"是不合适的。基本上,只有最小/最大信息在写入时保留在条带页脚中,然后在读取时用于跳过明显不符合WHERE
要求的所有条带,在某些情况下大幅减少I / O (在专栏商店中流行的技巧,例如MySQL上的InfoBright,以及Oracle Exadata设备[被称为"智能扫描"由Oracle营销])
5. Hive与"行商店"格式(Text,SequenceFile,AVRO)和"列存储"格式(ORC,Parquet)一样。优化器只在初始Map阶段使用特定策略和快捷方式 - 例如条带消除,向量化运算符 - 当然序列化/反序列化阶段对列存储更精细。
答案 1 :(得分:0)
嘿,我无法帮助你解决所有问题,但我会尝试一下
您可以使用filedump实用程序读取ORC文件的元数据,请参阅here
我对模式演变非常不确定,但据我所知,ORC不支持进化。
ORC索引存储总和最小值和最大值,因此如果您的数据完全是非结构化的,您可能仍需要读取大量数据。但是自ORC的最新版本发布以来,您可以使用额外的Bloom-Filter,在行组消除方面更加准确。也许这也可能有用orc-user mailing list
ORC为每列提供索引,但它只是一个轻量级索引。您可以在filefooter,stripefooter和默认情况下每10000行存储有关min / max和sum的信息。所以它不需要那么多空间
如果将表存储在Orc Fileformat中,Hive将使用特定的ORC Recordreader从列中提取行。柱状存储的优点是您不必阅读整行