物化列:字节为解决 Spark 嵌套列查询性能低下的优化

本文介绍了字节跳动如何通过物化列优化Spark SQL处理嵌套列查询的性能问题。在处理大量嵌套类型数据时,传统方法存在IO消耗大、无法利用向量化读取和算子下推等问题。物化列通过预先计算和存储常用字段,提高了查询效率,减少了存储开销,在字节跳动的数据仓库中取得了显著的性能提升。
摘要由CSDN通过智能技术生成

本文来自11月举办的 Data + AI Summit 2020 (原 Spark+AI Summit),主题为《Materialized Column- An Efficient Way to Optimize Queries on Nested Columns》的分享,作者为字节跳动的郭俊。

在数据仓库领域,使用复杂类型(如map)中的一列或多列,或者将许多子字段放入其中的场景是非常常见的。这些操作可能会极大地影响查询性能,因为:

•这些操作非常废 IO。比如我们有一个字段类型为 Map,其包含数十个子字段那么在读取这列时需要把整个列都读出来。并且 Spark 将遍历整个 map 获得目标键的值。•在读取嵌套类型列时不能利用向量化读取。•读取嵌套列时不能使用算子下推(Filter pushdown)。

在过去的一年里,字节的数据引擎团队在 Apache Spark 中添加了一系列优化来解决 Parquet 格式中的上述问题。

其中包括支持对 Parquet 中复杂数据类型的向量化读取,允许对 Parquet 中的结构列进行子字段修剪,等等。此外,该团队还开发了一个名为物化列(materialized column)的新特性,透明地解决了任意列式存储(不仅仅是Parquet)的上述问题。在过去的一年里,物化列在字节跳动数据仓库中工作得很好。以一个典型的表为例,每天增量的数据量约为 200 TB。在它上面创建 15 个物化列可以提高超过110%的查询性能,而存储开销不到7%。在这次讨论中,我们将深入介绍 Spark SQL 中物化列的内部原理,描述物化列的使用场景。

下面是本文的视频,相关 PPT 可以关注 过往记忆大数据 或 Java与大数据架构  公众号并回复  9910 获取。

今天的主题主要分为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值