【问题标题】:Why spark sql is adding where 1=0 during load?为什么 spark sql 在加载期间添加 where 1=0?
【发布时间】:2020-01-24 01:50:55
【问题描述】:

我对 spark 很陌生。我的任务是通过 denodo 数据平台从 sql server 获取 3M 记录并写入 s3。在 sql server 端,它是两个表的连接视图。视图很耗时。

现在我正在尝试运行 spark 命令:

val resultDf = sqlContext.read.format("jdbc").option("driver","com.denodo.vdp.jdbc.Driver").option("url", url).option("dbtable", "myview").option("user", user).option("password", password)

我可以看到 spark 正在发送如下查询:

SELECT * FROM myview WHERE 1=0

这部分需要一个多小时。

谁能告诉我为什么要在此处附加 where 子句?

谢谢。

【问题讨论】:

  • 你能找到这个吗?

标签: apache-spark-sql denodo


【解决方案1】:

如果我正确理解了您的问题,Spark 将向 Denodo 服务器发送 SELECT * FROM myview WHERE 1=0

如果是这种情况,Denodo 应该将该查询检测为由于 WHERE 子句中的不兼容条件而没有结果的查询,并且执行应该是即时的。您可以尝试在 Denodo 的 VQL Shell(在版本 6 中可用)、Denodo 的管理工具或任何其他 ODBC/JDBC 客户端中执行相同的查询,以验证该查询甚至没有发送到数据源。也许 Spark 正在执行该查询以首先获取输出模式?

您使用的是哪个版本的 Denodo?

【讨论】:

    【解决方案2】:

    我看到这是一个旧线程 - 但是我们遇到了同样的问题 - 但是它不会一直发生,也不会发生在所有连接/查询上 -

    SQOOP 命令被发送——AND (1=0) context ('i18n' = 'us_est') 被添加到某处——我们正在使用 Denodo 7——jdbc 驱动程序com.denodo.vdp.jdbc.Driver

    select
       BaseCurrencyCode,BaseCurrencyName,TermCurrencyCode,TermCurrencyName,
       ExchangeAmount,AskRate,BidRate,MidMarketRate,ExchangeRateStartDate,
       ExchangeRateEndDate,RecCreateDate ,LastChangeDate
    from 
       CurrencyExchange
    WHERE 
      LastChangeDate > '2020-01-21 23:20:15' 
      And LastChangeDate <= '2020-01-22 03:06:19' 
      And (1 = 0) context ('i18n' = 'us_est' )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 2012-02-26
      • 2021-06-13
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多