首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的重复列名(Impala)

SQL中的重复列名(Impala)
EN

Stack Overflow用户
提问于 2018-02-14 23:47:14
回答 1查看 1.7K关注 0票数 0

下面的SQL返回错误AnalysisException: Duplicate column name: all_periods_int

代码语言:javascript
复制
DROP TABLE IF EXISTS temp_nielsen_other_upc_all_markets_test;

CREATE TABLE IF NOT EXISTS temp_nielsen_other_upc_all_markets_test
PARTITIONED BY (all_periods_int)
STORED AS PARQUET
AS
SELECT          
                    COALESCE(gap.all_markets,fct.all_markets) AS all_markets,
                    COALESCE(gap.all_periods, fct.all_periods) AS all_periods,
                    NVL(gap.dollar,0) - NVL(fct.dollar,0) AS dollar,
                    (CAST(SUBSTR(COALESCE(gap.all_periods,fct.all_periods),7,2) AS int)+2000)*10000+CAST(SUBSTR(COALESCE(gap.all_periods,fct.all_periods),1,2) AS int)*100+CAST(SUBSTR(COALESCE(gap.all_periods,fct.all_periods),4,2) AS int) AS all_periods_int
FROM                temp_nielsen_gap_total_all_markets_raw gap
FULL OUTER JOIN(

                    SELECT
                                        all_markets,
                                        all_periods,
                                        SUM(dollar) AS dollar
                    FROM                temp_nielsen_sku_facts_all_markets_raw
                    GROUP BY            all_markets,
                                        all_periods
                ) fct
ON(                 gap.all_markets = fct.all_markets AND
                    gap.all_periods = fct.all_periods
    )
WHERE           ABS(NVL(gap.dollar,0) - NVL(fct.dollar,0)) > 1 AND
                fct.all_markets in (SELECT DISTINCT all_markets FROM temp_nielsen_gap_total_all_markets_raw);

all_periods_int是由这个SQL创建的,它不存在于两个底层表中的任何一个中。

另外,另一件奇怪的事情是,以下两种方案都运行良好:

  1. WHERE语句fct.all_markets in (SELECT DISTINCT all_markets FROM temp_nielsen_gap_total_all_markets_raw)中没有第二个条件的情况下运行完整语句;
  2. 只需运行不带CREATE TABLE语句的CREATE TABLE语句即可。

我看不出有什么地方可以复制all_periods_int

EN

回答 1

Stack Overflow用户

发布于 2018-03-05 22:06:53

所以问题是,分区变量只能在分区BY子句中引用,而不能在SELECT语句中引用。但是,在SELECT中生成变量时,需要嵌套以下步骤:

代码语言:javascript
复制
     DROP TABLE IF EXISTS temp_nielsen_other_upc_all_markets_test;

       CREATE TABLE IF NOT EXISTS temp_nielsen_other_upc_all_markets_test
       PARTITIONED BY (all_periods_int)
       STORED AS PARQUET
       AS
        SELECT
       all_markets
       , all_periods
, dollars
FROM
(
SELECT          
                    COALESCE(gap.all_markets,fct.all_markets) AS all_markets,
                    COALESCE(gap.all_periods, fct.all_periods) AS all_periods,
                    NVL(gap.dollar,0) - NVL(fct.dollar,0) AS dollar,
                    (CAST(SUBSTR(COALESCE(gap.all_periods,fct.all_periods),7,2) AS int)+2000)*10000+CAST(SUBSTR(COALESCE(gap.all_periods,fct.all_periods),1,2) AS int)*100+CAST(SUBSTR(COALESCE(gap.all_periods,fct.all_periods),4,2) AS int) AS all_periods_int
FROM                temp_nielsen_gap_total_all_markets_raw gap
FULL OUTER JOIN(

                    SELECT
                                        all_markets,
                                        all_periods,
                                        SUM(dollar) AS dollar
                    FROM                temp_nielsen_sku_facts_all_markets_raw
                    GROUP BY            all_markets,
                                        all_periods
                ) fct
ON(                 gap.all_markets = fct.all_markets AND
                    gap.all_periods = fct.all_periods
    )
WHERE           ABS(NVL(gap.dollar,0) - NVL(fct.dollar,0)) > 1 AND
                fct.all_markets in (SELECT DISTINCT all_markets FROM temp_nielsen_gap_total_all_markets_raw)) t_final;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48798049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档