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