Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么火花分析仪报告;必须聚合相关标量子查询;万一_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 为什么火花分析仪报告;必须聚合相关标量子查询;万一

Scala 为什么火花分析仪报告;必须聚合相关标量子查询;万一,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,由于以下错误,使用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 WHER

由于以下错误,使用
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
  )
coalesce
中的前两个
案例是我添加的,导致测试失败。我相信这是因为子查询将返回多行,但我不确定如何绕过它。感谢您的帮助。如果有区别,则此
SQL
仅在spark中运行,用于测试,它实际上在生产中的雪花仓库中运行。

如果此代码:

CASE WHEN ndc_code IN 
              (SELECT CODE FROM BOC_MED_METADATA WHERE CODE_TYPE = 'ndc')
     THEN '180'
正在生成表单的错误

必须聚合相关标量子查询

并且错误消息是准确的,则表中缺少
code
CODETYPE
。因此,我的第一个建议是限定所有列名:

CASE WHEN ndc_code IN 
              (SELECT bmm.CODE FROM BOC_MED_METADATA bmm WHERE bmm.CODE_TYPE = 'ndc')
     THEN '180'

这将返回一个错误,即未找到一列或其他列。

中使用
,而不是在前两个
案例中使用
EXISTS
。试试这个:

COALESCE(
    CASE WHEN EXISTS( SELECT 1 FROM BOC_MED_METADATA WHERE CODE_TYPE = 'ndc' AND CODE = ndc_code) 
      THEN '180'
    END,
    CASE WHEN EXISTS( SELECT 1 FROM BOC_MED_METADATA WHERE CODE_TYPE = 'hcpcs' AND CODE = hcpcs_code)
      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
  )

如果上述操作失败,请尝试使用表名限定
ndc_代码
hcpcs_代码

我对看到错误感到困惑,因为我不知道子查询是如何被认为是相关的。他们在干什么

无论如何,要消除这个错误(我认为是在执行查询之前的分析时发生的),就要使用任何标准的聚合函数,以确保Spark Analyzer查询只返回一行,只有一列,或者根本没有行(结果是
null

您可以使用
first
max
标准聚合函数,如下所示:

SELECT first(CODE) FROM BOC_MED_METADATA WHERE CODE_TYPE = 'ndc'

我认为Spark不应该报告异常,因为我找不到任何相关查询,并且在
中使用SQL
应该真正接受子查询中任意数量的值。我很困惑。

答案是否需要帮助?我对列进行了限定,但仍然得到相同的错误。下面是堆栈跟踪的样子:
Filter(code#479=outer(ndc#u code#532))+-SubqueryAlias-boc#u-med#metadata+-Relation[id#478L,code#479,code#type#480,active#window#481]parquet