spark sql -无法解析别名列

xe55xuns  于 2023-04-07  发布在  Apache
关注(0)|答案(2)|浏览(234)

我正在将一个脚本迁移到spark-sql,它会组装一些case并将这些case的结果重用于其他操作,但我不能在脚本中使用reference列。
例如:

SELECT order, 
       case when total > 70 
            then 1 
            end order_total,
       coalesce(order_total,total) as total    
FROM SALES

当运行脚本时,我得到以下消息:
无法解析给定输入列的“order_total”:...
上面的查询只是一个例子,我的脚本有几个类似的操作,我知道使用cte或subquerys工作,但我想知道是否可以在spark中使用上面的表单。
上面的查询只是一个例子,我的脚本有几个类似的操作,我知道使用cte或subquerys工作,但我想知道是否可以在spark中使用上面的表单。

z9ju0rcb

z9ju0rcb1#

你不能在一个选择中使用别名,同时,当你想一次完成它时,你需要重复它

SELECT 
   order
   , case when total > 70 then 1 end order_total
   , coalesce(case when total > 70 then 1 end,total) as total
FROM SALES
cxfofazt

cxfofazt2#

我们的代码之前在Spark版本2.4.5上工作,但目前它在Spark版本3.3.3上不工作。我们从hbase,phoenix 5.1.3获取数据。Phoenix本身正常查询此SQL代码。但spark引发错误

org.apache.spark.sql.AnalysisException:列“num”不存在。是否为下列之一?[USS_ID_TYPE,SPARK_GEN_SUBQ_354.NUM,SPARK_GEN_SUBQ_354.ADM_UNIT];

select
  t.uss_id_type,
  t.value1 as num,
  0 as adm_unit
 from
   tsar_processing.tsar_stage_2 t
 where
    entity_code in('OSM_Indicator_1586', 'OSM_Indicator_738')
    and action_code = 'create'
    and location_type = 'CITY'
  and instance_date_time >= to_timestamp('${dateTimeStr}')

相关问题