wonderful1432 2024-07-26 16:06 采纳率: 9.1%
浏览 26

hive子查询、插入数据报错

dbeaver hive一直报这个错,但是明明每个子查询都起了别名了,该怎么改


```sql
  INSERT INTO table TMP_F_DPST_ACCT   
   SELECT 
           A.DPST_ACCT_CD      ,  
           A.ODS_STR_DT        ,  
           A.ODS_CHAIN_FLG     ,  
           A.ACCT_NM           ,  
           A.ACCT_SHRT_NM      ,  
           A.ACCT_TP           ,  
           A.CUST_CD           ,  
           A.MRGN_DPST_FLG     ,  
           A.CARD_FLG          ,  
           A.OPN_ACCT_DT       ,  
           A.EXPR_DT           ,  
           A.OPN_ACCT_ORG_CD   ,  
           A.ACCTNG_ORG_CD     ,  
           A.ACCT_MNGR         ,  
           A.DPST_ACCT_STS     ,  
           A.VCHR_STS          ,  
           A.VCHR_TP           ,  
           A.VCHR_NO           ,  
           A.SRC_SYS_CD        ,  
           A.UNQ_ID_IN_SRC_SYS ,  
           A.ODS_CMP_COL_MD5   ,
           CASE WHEN 
                 A.DPST_ACCT_CD||'N' = B.DPST_ACCT_CD||'N' AND
                 A.ODS_CMP_COL_MD5||'N' != B.ODS_CMP_COL_MD5||'N' THEN '1' 
                 --表示该表在源表取的字段已有更新,更新数据无效日期并且插入新链
                WHEN 
                A.DPST_ACCT_CD||'N' = B.DPST_ACCT_CD||'N' AND
                A.ODS_CMP_COL_MD5||'N' =  B.ODS_CMP_COL_MD5||'N' AND 
                A.ODS_CHAIN_FLG = 'N' THEN '3'
                --表示该表在源表取得字段未发生改变,但已经无效,更新数据无效日期
                WHEN 
                A.DPST_ACCT_CD||'N' = B.DPST_ACCT_CD||'N' AND
                A.ODS_CMP_COL_MD5||'N' =  B.ODS_CMP_COL_MD5||'N' AND 
                A.ODS_CHAIN_FLG = 'Y' THEN ' '
                --表示该表在源表未取得字段发生了改变,但不影响目标表,不做处理
                ELSE '2' END 
                --表示该条数据新增
   
   
   FROM( (
   SELECT                                                                                                      
               DPST_ACCT_CD,                                                                                            
               ODS_STR_DT,                                                                                              
               ODS_CHAIN_FLG,                                                                                           
               ACCT_NM,                                                                                                 
               ACCT_SHRT_NM,                                                                                            
               ACCT_TP,                                                                                                 
               CUST_CD,                                                                                                 
               MRGN_DPST_FLG,                                                                                           
               CARD_FLG,                                                                                                
               OPN_ACCT_DT,                                                                                             
               EXPR_DT,                                                                                                 
               OPN_ACCT_ORG_CD,                                                                                         
               ACCTNG_ORG_CD ,                                                                                          
               ACCT_MNGR,                                                                                               
               DPST_ACCT_STS,                                                                                           
               VCHR_STS,
               VCHR_TP,                                                                                                
               VCHR_NO,                                                                                                 
               'CBS' AS SRC_SYS_CD,                                                                                                   
               'DPSACCOUNTINFO#'||DPST_ACCT_CD AS UNQ_ID_IN_SRC_SYS,                                    
               md5(ACCT_NM||'#'||ACCT_SHRT_NM||'#'||ACCT_TP||'#'||CUST_CD||'#'||MRGN_DPST_FLG||'#'||CARD_FLG||'#'||OPN_ACCT_DT||'#'||EXPR_DT||'#'||OPN_ACCT_ORG_CD||'#'||ACCTNG_ORG_CD||'#'||ACCT_MNGR||'#'||DPST_ACCT_STS||'#'||VCHR_STS||'#'||VCHR_TP||'#'||VCHR_NO) AS  ODS_CMP_COL_MD5                                                                                              
            FROM (                                                                                                      
            SELECT                                                                                                      
              T1.ACCTNO AS DPST_ACCT_CD,                                                                                
              DATE_FORMAT((cast('20240725' as date),'yyyyMMdd')) AS ODS_STR_DT,                                                             
              T1.ODS_FLG AS ODS_CHAIN_FLG,                                                                              
              T1.CUSTNAME AS ACCT_NM,                                                                                   
              T1.SHTNAME AS ACCT_SHRT_NM,                                                                               
              T1.SIGACCFLG AS ACCT_TP,                                                                                  
              T2.CUSTOMID AS CUST_CD,                                                                                   
              CASE TRIM(T1.MARGINFLG) WHEN '1' THEN 'Y' WHEN '0' THEN 'N' ELSE  TRIM(T1.MARGINFLG) END AS MRGN_DPST_FLG,
              CASE TRIM(T1.CRDFLG) WHEN '1' THEN 'Y' WHEN '0' THEN 'N' ELSE  TRIM(T1.CRDFLG) END AS CARD_FLG,           
              REPLACE(T1.OPENDATE,'-','') AS OPN_ACCT_DT,                                                               
              REPLACE(T1.VALIDDATE,'-','') AS EXPR_DT,                                                                  
              T1.OPENBRC AS OPN_ACCT_ORG_CD,                                                                            
              T1.PROFITBRC AS ACCTNG_ORG_CD,                                                                            
              T1.ACCMANG AS ACCT_MNGR,                                                                                  
              T1.ACCSTAT AS DPST_ACCT_STS,                                                                              
              T1.OPNVOUFLG AS VCHR_STS,                                                                                 
              T1.VOUKIND AS VCHR_TP,                                                                                    
              T1.VOUNO AS VCHR_NO                                                                                       
            FROM ((select * from O_CBS_DPSACCOUNTINFO) T1                                                                                
            LEFT JOIN (select * from O_CBS_CISCUSTACCINFO) T2                                                                          
            ON T1.ACCTNO = T2.ACCTNO ) d                                                                               
            WHERE T1.ODS_DATA_DT = DATE_FORMAT((cast('20240725' as date),'yyyyMMdd')) ) c ) A
           LEFT JOIN 
             (SELECT * FROM F_DPST_ACCT 
              WHERE  ODS_END_DT = DATE_FORMAT(cast('29991231' as date),'yyyyMMdd')) B
           ON A.UNQ_ID_IN_SRC_SYS = B.UNQ_ID_IN_SRC_SYS );

```

  • 写回答

2条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 16:06
    关注

    引自免费微信小程序:皆我百晓生

    这个问题似乎与Hive数据库本身有关,而不是SQL语法错误。然而,如果你尝试在Hive中运行上述查询时遇到问题,这可能是因为某些字段在源表(F_DPST_ACCT)和目标表(TMP_F_DPST_ACCT)之间没有正确映射。

    要解决这个问题,你需要确保两个表之间的主键/外键关系正确设置。例如,如果你在目标表(TMP_F_DPST_ACCT)中有一个名为 UNQ_ID_IN_SRC_SYS 的字段,并且在源表(F_DPST_ACCT)中有相应的主键,那么你应该将这两个字段连接起来。此外,如果两个表中的字段有相同的名称,你应该确保它们在结构上是相同的类型(例如,字符串、数字等)。否则,可能会出现类型不匹配的问题。

    为了解决此问题,可以尝试以下步骤:

    1. 确保源表(F_DPST_ACCT)和目标表(TMP_F_DPST_ACCT)具有正确的主键和外键关系。
    2. 检查两个表中的字段是否有重复,如果有,则删除一个。
    3. 如果两个表中的字段有相同的名字,检查这些字段是否在结构上一致。

    如果你能提供更多的关于源表和目标表的信息,我可以更具体地帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月26日