SparkSQL:jdbc 数据源是不是有“filterPushdown”功能

Posted

技术标签:

【中文标题】SparkSQL:jdbc 数据源是不是有“filterPushdown”功能【英文标题】:SparkSQL : Is there a "filterPushdown" feature for jdbc datasourceSparkSQL:jdbc 数据源是否有“filterPushdown”功能 【发布时间】:2018-12-26 06:26:44 【问题描述】:

我正在使用 Spark 2.3,并从 mysql 表中加载数据。

我想知道有没有类似于 parquet 文件的“filterPushdown”功能。

我有一个包含数百万行的大表,其中我需要加载与某些键匹配的部分数据以及时间戳 > certian_timestamp。

"where key_col in (34,35, .. ) and ts > 1539688500000"

在此之后,我需要将此数据集与另一个小表连接起来。

我可以使用“filterPushdown”和“joinPushdown”之类的东西在数据库本身中实现此操作(过滤和加入)吗? (如果存在)

【问题讨论】:

是的,过滤器会尽可能下推到源数据库。您也可以将整个查询下推到数据库,但它有一个特殊的语法。您可以在docs.databricks.com/spark/latest/data-sources/… 阅读有关它的信息 【参考方案1】:

是的,过滤器下推可用于 JDBC 源,但仅适用于 Where 子句。

您可以在以下位置查看 https://docs.databricks.com/spark/latest/data-sources/sql-databases.html#push-down-a-query-to-the-database-engine

如果对于您的数据库它不起作用.. 使用以下为您实现它。

http://blog.madhukaraphatak.com/spark-datasource-v2-part-5/

希望这会有所帮助:)

干杯!

【讨论】:

以上是关于SparkSQL:jdbc 数据源是不是有“filterPushdown”功能的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL - 使用 SQL 语句使用 JDBC 加载数据,而不是表名

带有 JDBC 连接的 SparkSql [重复]

SparkSQL JDBC和JDBCServer区别

看SparkSQL如何支撑企业级数仓

SPARK SQL - 使用 DataFrames 和 JDBC 更新 MySql 表

SparkSQL:如何在从数据库加载数据集时指定分区列