为什么spark sql在加载期间添加1 = 0?

时间:2016-12-06 21:51:37

标签: apache-spark-sql denodo

我对火花很新。我有一项任务是通过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子句会附加在这里吗?

感谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我看到这是一个旧线程-但是我们遇到了同样的问题-但是它并非始终存在,也不在所有连接/查询中都发生-

发送了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' )