本地运行spark spark-sql
或者通过Pypark spark.sql(...)
,如果在查询中使用cte,然后使用不正确的命名空间/数据库引用cte,则查询工作正常(意外)。当我在生产环境(databricks)中运行查询时,我得到一个表或视图未找到错误(预期)。
意外的传递行为可以通过 spark-sql
:
WITH myview AS (
SELECT 1 AS column
)
SELECT
*
FROM
invalid_namespace.myview;
当我期望它失败时,它返回“1”。
有人能帮我在本地使这个失败,这样我们就可以在部署之前正确地进行测试了吗?
从终端复制的确切步骤:
$ spark-sql
...
spark-sql> WITH some_new_cte AS (SELECT 1 AS column)
> SELECT * FROM namespace_does_not_exist.some_new_cte;
...
1
Time taken: 2.294 seconds, Fetched 1 row(s)
spark-sql>
2条答案
按热度按时间f87krz0w1#
如果查看查询计划,它实际上无法解析
您的查询返回“1”的原因是spark看到您的视图在同一个查询中,所以它忽略了您的命名空间。如果名称空间真的不存在,它将失败。
mgdq6dx12#
这似乎是一个影响spark 2.4.0到2.4.5版本的bug(我没有检查<2.4.0)。它似乎已在2.4.6中修复,并继续在3.0.0中按预期工作。
2.4.0中的意外成功:
已测试但未关闭:2.4.1、2.4.2、2.4.3、2.4.4(均意外成功)
2.4.5中的意外成功:
2.4.6中的预期故障:
3.0.0中的预期故障: