apache-spark - 多级分区表的 Spark (EMR) 分区修剪行为
问题描述
如果我有一个使用多级分区创建的表,即由两列(州、市)组成,如下所示:
state=CA,city=Anaheim
state=Texas,city=Houston
state=Texas,city=Dallas
state=Texas,city=Austin
state=CA,city=SanDiego
如果我运行这样的选择查询:
select * from table_name where city=Houston
即在哪里使用了第二个分区列,它会扫描city=Houston
分区state=Texas
吗?我很确定这就是 Hive 的运作方式,但我很想确认 Spark 中的行为。此外,如果它在 EMR 的 Spark 中执行,行为会有什么不同吗?
解决方案
如果您使用 hive 存储表,那么它肯定能够对外部和内部分区进行分区修剪。Hive 单独保存有关表的分区信息的元数据。因此,当查询针对特定分区时,它能够进行优化。
您实际上可以使用以下方法测试此行为explain select * from table_name where city ='Houston';
但是,如果您使用 spark 以嵌套结构编写分区,那么我不太确定。如果查询需要遍历整个目录结构,当目录数量巨大时,这将是昂贵的。
推荐阅读
- android - 以 XML 格式查看时,导入 Android Studio 的 SVG 模糊不清
- java - 如何编写一个接受文字数组的通用函数
- vb.net - 对于组合框,selectedIndex 返回 0,而 selectedtext 返回一个值
- python - 从字符串 PySpark 中获取年、月、日
- c# - C# JSON 如何以类名作为节点名序列化列表
- r - R - 根据 group_id 和条件语句创建新索引
- amazon-s3 - Loki 配置与 s3
- javascript - 谷歌折线图 - 从arraydatatable动态添加列/行
- javascript - 将jquery转换为javascript以避免jquery库冲突
- javascript - 如何在播放中更改视频分辨率