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

hive、子查询、别名问题

在dbeaver中hive,明明每个子查询都起别名了,还是一直报错:SQL 错误 [40000] [42000]: Error while compiling statement: FAILED: ParseException line 43:3 cannot recognize input near '(' 'SELECT' 'DPST_ACCT_CD' in joinSource


```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 );

```

  • 写回答

1条回答 默认 最新

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

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

    这个问题似乎与Hive中的子查询有关,特别是在连接到另一个表时。JOIN语句通常用于将两个或多个表的数据进行关联。然而,在这个特定的例子中,您试图在一个单独的行上执行多张表的连接操作,这可能导致错误。

    解决这个问题的方法是确保您的SQL语句正确地将两个表连接在一起,并且所有必要的条件都已满足。在这个例子中,您尝试在源表(A)中获取数据,并将其与一个名为B的表连接起来。但是,由于B表没有提供足够的信息来完成此操作,所以出现了错误。

    为了解决这个问题,您可以考虑以下几种方法之一:

    1. B表添加到A表中作为额外的列。
    2. A表中创建一个临时表,其中包含B表的所有列,然后通过LEFT JOIN将这两个表连接起来。
    3. 使用聚合函数,例如ROW_NUMBER(),来确定哪些行应该被合并到最终结果集中。

    为了展示如何使用这些方法,我可以为您提供一些示例代码。不过,具体实现取决于您正在使用的编程语言和数据库管理系统。如果您能提供更多关于您使用的环境的信息,我可以更准确地指导您。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月26日

悬赏问题

  • ¥15 数据库原理及应用上机练习题
  • ¥30 征集Python提取PDF文字属性的代码
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?