1

我对火花很陌生。我的任务是通过 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 子句?

谢谢。

4

2 回答 2

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' )
于 2020-01-23T15:09:41.990 回答
0

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

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

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

于 2016-12-09T01:07:26.940 回答