predicate 下推在spark/hive视图表中不起作用

velaa5lx  于 2021-07-12  发布在  Spark
关注(0)|答案(0)|浏览(387)

根据我的阅读,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>

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题