scala - 为什么 Spark Analyzer 在案例中报告“必须聚合相关标量子查询”?
问题描述
spark-sql
由于以下错误,使用的测试失败:
必须聚合相关的标量子查询
失败的 SQL 查询的相关部分:
COALESCE(
CASE WHEN ndc_code IN
(SELECT CODE FROM BOC_MED_METADATA WHERE CODE_TYPE = 'ndc')
THEN '180'
END,
CASE WHEN hcpcs_code IN
(SELECT CODE FROM BOC_MED_METADATA WHERE CODE_TYPE = 'hcpcs')
THEN '180'
END,
med_order_end_dttm,
CASE WHEN days_supply IS NOT NULL
THEN
CASE
WHEN discontinued AND (med_order_recorded_dttm BETWEEN medication_start AND start_plus)
THEN med_order_recorded_dttm
WHEN discontinued AND (med_order_recorded_dttm > start_plus)
THEN start_plus
WHEN NOT discontinued
THEN start_plus
END
END,
medication_start
)
前两个cases
是coalesce
我添加的,导致测试失败。我相信这是因为子查询将如何返回多行,但我不确定如何解决这个问题。任何帮助表示赞赏。如果有什么不同,这SQL
只是为了测试而在 spark 中运行,它实际上是在生产中的雪花仓库上运行的。
解决方案
我很困惑看到错误,因为我看不出子查询如何被认为是相关的。它们与什么相关联?
无论如何,要消除错误(我认为在执行查询之前的分析时发生)是使用任何标准聚合函数来确保 Spark Analyzer 查询确实只返回单列或不返回单行行(结果会给出null
)。
您可以使用first
或max
标准聚合函数,如下所示:
SELECT first(CODE) FROM BOC_MED_METADATA WHERE CODE_TYPE = 'ndc'
我不认为 Spark 应该报告异常,因为我找不到任何相关查询,并且使用 SQLIN
应该真正接受来自子查询的任意数量的值。我很困惑。
推荐阅读
- python - Python:计算字符串开头的连续字符
- java-8 - 在 Java 8 中对复杂的解引用链进行空检查
- python - mysql.connector 系统错误问题:32 Broken Pipe
- sql - 相同的 SQL 查询适用于某些表,但在同一数据库中相同的其他表上出错
- google-apps-script - 我想在 Google Sheet 宏中使用 Autocrat
- javascript - 为 Lightbox 图像 ejs 动态显示图像
- java - 传递给方法的这个 Java 数组发生了什么?
- django - 将 api 密钥保存到数据库 django
- python-3.x - 如何解决 DataFrame 中的数据过滤挑战?
- java - 如何向导航抽屉项目添加操作?