繁体   English   中英

查询整个 Hive 外部表上的非分区列

[英]Query non-partitioned column on Entire Hive external Table

我有 hive 外部表(以 parquet 格式存储的 s3 文件),使用 spark 大约 30 GB 大小和数百个分区创建。 但是,我需要查询非分区列(例如 SUPPLIER_ID)上的数据以查看完整的事务历史记录,但不特定于某个时期或日期(分区列)。 在我不确定哪个分区数据属于 Hive 表的情况下,如何确保这种查询模式?

引用自: https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cdh_ig_predicate_pushdown_parquet.html

在过滤查询结果时,parquet-mr API(例如,Hive 或 Spark)的消费者可以从 API 中获取所有记录,然后根据谓词条件评估每条记录。 但是,这需要组装 memory 中的所有记录,甚至是不匹配的记录。 使用谓词下推,这些条件被传递给 parquet-mr 库,该库在较低级别评估谓词并丢弃不匹配的记录而不先组装它们。

例如,在评估记录 {title: "The Starry Night", width: 92, height: 74} 针对条件 height > 80 时,不需要组装整个记录,因为它可以仅根据其高度属性。 但是,虽然条件 height > width 也不匹配记录,但在这种情况下不能使用谓词下推,因为我们需要同一记录的多个字段来评估谓词。

此外,谓词下推还允许根据其最小/最大统计信息丢弃不能包含任何匹配项的整个行组。 例如,如果一个行组的统计信息包括高度列的{min: 62, max: 78},并且过滤条件是height > 80,那么该行组中没有一条记录可以匹配,从而整个行组可以丢弃。

只需编写一个查询,Parquet 就具有上面列出的一些智能。 它可以跳过各种组并使用列存储来检查事物,这比读取/反序列化整行要快得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM