【问题标题】:Athena (Hive/Presto) Parquet vs ORC In Count QueryAthena (Hive/Presto) Parquet vs ORC 计数查询
【发布时间】:2020-08-15 04:43:27
【问题描述】:

我正在 athena 中以 parquet 和 orc 格式测试一个大型数据集(1.5TB,5.5b 条记录)。我的第一个测试是一个简单的,计数查询-

SELECT COUNT(*) FROM events_orc
SELECT COUNT(*) FROM events_parquet

parquet 文件作为 orc 文件运行此查询需要一半时间。但我注意到的一件事是,当对 parquet 文件运行计数时,它会在扫描字节时返回 0kb,而对于 orc,它会返回 78gb。这对镶木地板很有意义,因为计数在元中,无需扫描字节。 orc 也有一个带有计数的元数据,但它似乎没有使用该元数据来确定这些文件的计数。

为什么 Athena 不使用 orc 文件中的元数据来确定计数,而在 parquet 文件中显然是这样做的?

【问题讨论】:

  • 在ORC的情况下你的数据压缩了吗?

标签: hive parquet presto amazon-athena orc


【解决方案1】:

正如您所说,答案是 Athena 读取 Parquet 元数据,而不是 ORC。除了该功能不在 Athena 使用的 Presto 和/或 ORC serde 版本中之外,没有其他理由。

我还注意到 Athena 在使用 ORC 时读取了太多数据,它不会跳过它应该跳过的列,等等。我认为 Athena ORC serde 只是旧的并且没有你所期望的所有优化。 Athena 毕竟是基于一个非常古老的 Presto 版本。

【讨论】:

    【解决方案2】:

    这取决于这些 ORC 文件是如何创建的。您能否解释一下您是如何在数据中进行 ETL 以及表定义是什么?

    ORC 的索引很少:

    索引 ORC 在每个文件中提供三个级别的索引:

    文件级别:

    关于整个文件每列中的值的统计信息

    条带级别:

    关于每个列中每个值的统计信息 条纹

    行级:

    关于每组 10,000 行的每列中的值的统计信息 在条带内 文件和条带级别的列统计信息位于 文件页脚,以便它们易于访问以确定其余部分是否 文件的所有内容都需要读取。行级索引包括 每个行组的列统计信息和查找的位置 到行组的开头。

    Athena 就像 PrestoDb 一样,Athena 使用的查询引擎可以使用这些索引来加速查询。

    如果 Athena 不使用这些信息进行查询,我会感到非常惊讶。

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 2019-07-30
      • 2017-04-22
      • 2020-02-11
      • 2020-11-28
      • 2013-11-26
      • 2018-10-23
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多