根据我的阅读,spark predict push down将用于源端(简化数据扫描)。
电子病历5.32.x
spark版本-2.4.5
配置单元版本-2.x
数据量超过2 TB。
我有另一个功能团队创建的配置单元/Spark表。他们还在这个表的顶部创建了视图。源表和视图之间的唯一区别是创建日期列数据类型
基表->创建日期->日期
查看->创建日期->时间戳
问题: predicate 下推仅应用于基表查询,而不应用于视图查询。
基表查询:
spark.sql("""select company_id, create_date
from `db`.`table` where product_name = 'sm' and
create_date = cast('2018-07-01' as date) and country ='selva'""").explain(True)
实物计划
==物理计划==(1)项目[公司id#1993l,创建日期#1997]+-(1)过滤器((isnotnull(创建日期#1997)和&isnotnull(国家#2003))&&(创建日期#1997=17713))&&(国家#2003=selva))+-*(1)文件扫描Parquet地板数据库表[公司id#1993l,创建日期#1997,国家#2003,产品名称#2080]成批:true,格式:parquet,位置:prunedMemoryFileIndex[s3://location…,分区筛选器:[isnotnull(product\u name\2080),(product\u name\2080=sm)],pushedfilters:[isnotnull(create\u date),isnotnull(country),equalto(create\u date,2018-07-01),eq…,readschema:struct<company\u id:bigint,create_date:date,country:string>
查看查询:
spark.sql(
"""
select
create_date
from db.view where
product_name = 'sm' and country ='United States'
"""
).filter("cast(create_date as date) = cast('2018-07-01' as date)").explain(True)
==物理计划==(1)项目[cast(create#date#2176 as timestamp)as create#date#2087]+-(1)过滤器(((isnotnull(country#2182)&&isnotnull(create#date#2176))&&&(country#2182=美国))&(cast(cast(create#date#2176 as timestamp)as date)=17713))+-*(1)文件扫描Parquet地板数据库表[create#date#2176,country#2182,product#name#2259]批处理:true,格式:parquet,位置:prunedMemoryFileIndex[s3://location…,分区筛选器:[isnotnull(product#nameţ2259),(productţnameţ2259=sm)],pushedfilters:[isnotnull(country),isnotnull(createţdate),equalto(country,united)],readschema:struct<create_date:date,country:string>
或
spark.sql(
"""
select
create_date
from db.table where
product_name = 'sm' and country ='United States'
"""
).filter("create_date = cast('2018-07-01' as timestamp)").explain(True)
实际计划:
==物理计划==(1)项目[按创建日期2265转换为cast(创建日期2354作为时间戳)&(国家2360=美国))&(按创建日期2354作为时间戳转换为cast)=153040320000000)
+-(1)filescan parquet db.table[createţdateţ2354,countryţ2360,productţnameţ2437]batched:true,format:parquet,location:prunedMemoryFileIndex[s3:location..,partitionfilters:[isnotnull(productţnameţ2437),(productţnameţ2437=sm)],pushedfilters:[isnotnull(createţdate),isnotnull(country),equalto(country,united)],readschema:struct<创建_date:date,country:string>
暂无答案!
目前还没有任何答案,快来回答吧!