Scala下使用Spark BigQuery连接器查询时如何配置多谓词过滤
Spark BigQuery连接器多分区查询方案
实现方式
Spark BigQuery连接器的filter参数支持传入完整的SQL过滤表达式,你可以直接在同一个配置项里拼接多个日期谓词,连接器会自动将过滤条件下推到BigQuery服务端执行分区裁剪,只会扫描符合条件的分区数据,不会加载全表。
常用写法示例
- 连续日期范围查询
.option("filter", "_PARTITION_DATE >= '2019-01-01' AND _PARTITION_DATE < '2019-02-01'")
- 不连续离散日期查询
.option("filter", "_PARTITION_DATE IN ('2019-01-01', '2019-01-05', '2019-01-10')")
生效验证
你可以在BigQuery控制台的「查询历史」中查看对应请求的扫描字节数:如果过滤条件下推生效,扫描字节数仅等于匹配分区的总大小,远小于全表的数TB体积。
注意:不要将分区过滤条件写在
load()之后的DataFramefilter()方法中,该写法会先拉取全表数据再在Spark侧过滤,无法利用BigQuery的分区裁剪能力。
内容的提问来源于stack exchange,提问作者kaashmonee
相关产品推荐
相关产品推荐

