我是兽人档案的新手。我浏览了许多博客,但没有得到明确的理解。请帮助并澄清以下问题。
我可以从orc文件中获取模式吗?我知道在avro中,schema可以获取。
它实际上是如何提供模式演化的?我知道可以添加的列很少。但如何做到这一点。我只知道,创建orc文件是通过将数据加载到以orc格式存储数据的配置单元表中。
orc文件索引是如何工作的?我所知道的是,每个条带索引都将被维护。但由于文件没有排序,它如何帮助查找条纹列表中的数据。它如何帮助在查找数据时跳过条纹?
为每一列维护索引。如果是,那么它不会消耗更多的内存吗?
列格式orc文件如何适应配置单元表,在配置单元表中,每列的值存储在一起。而hive表是用来逐个记录地获取记录的。两者如何结合?
2条答案
按热度按时间6qftjkof1#
嘿,我不能帮你解决所有的问题,但我会试试的
您可以使用filedump实用程序读取orc文件的元数据,请参见此处
我很不确定模式的进化,但据我所知,兽人不支持进化。
orc索引存储最小值和最大值之和,因此如果您的数据是完全非结构化的,您可能仍然需要读取大量数据。但是自从orc的最新版本以来,你可以使用一个额外的bloom过滤器,它在行组消除中更精确。也许这对orc用户邮件列表也有帮助
orc为每一列提供一个索引,但它只是一个轻量级索引。您可以在filefooter、stripefooter和默认情况下每10000行中的数字列上存储有关min/max和sum的信息。所以它不会占用那么多空间
如果将表存储在orc文件格式中,则配置单元将使用特定的orc recordreader从列中提取行。列式存储的优点是不必读取整行
cx6n0qe32#
1和2。使用hive和/或hcatalog在hive metastore中创建、读取、更新orc表结构(hcatalog只是一个侧门,允许pig/sqoop/spark/whatever直接访问metastore)
2
ALTER TABLE
命令允许添加/删除任何存储类型的列,包括orc。但要小心一个讨厌的bug,它可能会在之后导致矢量化读取崩溃(至少在v0.13和v0.14中是这样)三。和4。“指数”这个词相当不恰当。基本上,它只是在写入时保留在条带页脚中的最小/最大信息,然后在读取时用于跳过所有明显不符合条件的条带
WHERE
需求,在某些情况下大大减少了i/o(这一技巧在列存储中很流行,例如mysql上的infobright,但在oracle exadata设备中也很流行[被oracle marketing称为“智能扫描])5hive可以使用“行存储”格式(文本、sequencefile、avro)和“列存储”格式(orc、parquet)。优化器只是在初始Map阶段使用特定的策略和快捷方式——例如条带消除、向量化操作符——当然,序列化/反序列化阶段对列存储的处理要复杂一些。