【问题标题】:Loading data to temp table from staging table从临时表加载数据到临时表
【发布时间】:2022-01-22 05:51:17
【问题描述】:

我已将 CSV 文件加载到暂存区。现在我想将此文件转移到临时表。为此,我创建了 3 个不同的模式,即 STG(用于暂存区域)、TMP(用于临时区域)和 TGT(用于目标区域或数据仓库)。这是 STG 架构上的临时表。

GRANT USAGE ON SCHEMA PRASHANT_DWH.STG TO ROLE ACCOUNTADMIN;
CREATE OR REPLACE TABLE PRASHANT_DWH_STG_COUNTRY (
    ID NUMBER(38,0) NOT NULL,
    COUNTRY_DESC VARCHAR(256)
    );

这是 TMP 架构上的临时表。我添加了更多约束,例如维护列和代理键。

GRANT USAGE ON SCHEMA PRASHANT_DWH.TMP TO ROLE ACCOUNTADMIN;
CREATE OR REPLACE TABLE PRASHANT_DWH_TMP_COUNTRY (
    ID NUMBER(38,0) NOT NULL,
    COUNTRY_DESC VARCHAR(256),
    RCD_INS_TS TIMESTAMP, -- aaja ko date
    RCD_UPD_TS TIMESTAMP, -- aaja ko date, if updated then only updated date
    RCD_START_DI DATE, -- system date 
    RCD_CLOSE_DI DATE, -- future date  
    RCD_CLOSE_FLG VARCHAR(1),
    ID_SUR_KEY NUMBER NOT NULL, -- autogenerated, else key + 1, 
    PRIMARY KEY (ID_SUR_KEY) 
    );

我尝试合并这两个表并插入维护列代理键。但它一直显示错误

   MERGE TMP.PRASHANT_DWH_TMP_COUNTRY AS TC
   USING STG.PRASHANT_DWH_STG_COUNTRY AS SC
   ON PDTC.ID = PDSC.ID 
   WHEN MATCHED THEN 
        UPDATE PDTC.ID_SUR_KEY = PDSC.ID + 1 
        INSERT (ID, COUNTRY_DESC,RCD_INS_TS,RCD_UPD_TS,RCD_START_DI,RCD_CLOSE_DI,RCD_CLOSE_FLG,ID_SUR_KEY) 
        VALUES (SC.ID,SC.COUNTRY_DESC,current_timestamp,current_timestamp,current_date,current_date,N,SC.ID + 1)
   WHEN NOT MATCHEN BY TARGET THEN 
        DELETE

给出错误:

SQL compilation error: 
  syntax error line 1 at position 6 unexpected 'TMP'. 
  syntax error line 5 at position 15 unexpected 'PDTC'. 
  syntax error line 6 at position 8 unexpected 'INSERT'. 
  syntax error line 6 at position 32 unexpected ','. 
  syntax error line 6 at position 43 unexpected ','. 
  syntax error line 6 at position 54 unexpected ','. 
  syntax error line 6 at position 67 unexpected ','. 
  syntax error line 6 at position 80 unexpected ','. 
  syntax error line 6 at position 94 unexpected ','. 
  syntax error line 6 at position 105 unexpected ')'. 
  syntax error line 7 at position 37 unexpected ','. 
  syntax error line 7 at position 55 unexpected ','. 
  syntax error line 7 at position 73 unexpected ','. 
  syntax error line 7 at position 86 unexpected ','. 
  syntax error line 7 at position 99 unexpected ','. 
  syntax error line 7 at position 101 unexpected ','. 
  syntax error line 7 at position 108 unexpected '+'. 
  syntax error line 7 at position 111 unexpected ')'. 

【问题讨论】:

    标签: snowflake-cloud-data-platform etl snowflake-schema


    【解决方案1】:

    最后的合并缺少一些东西。

    • MERGE 之后的INTO
    • 我还完全限定了表名(可能不需要)
    • 你使用别名PDTC & PDSC 他们是TC & SC
    • RCD_CLOSE_FLG中插入的N是一个字符,所以需要用单引号包裹'N'
    MERGE INTO PRASHANT_DWH.TMP.PRASHANT_DWH_TMP_COUNTRY AS TC
    USING PRASHANT_DWH.STG.PRASHANT_DWH_STG_COUNTRY AS SC
        ON TC.ID = SC.ID 
    WHEN MATCHED THEN 
        UPDATE TC.ID_SUR_KEY = SC.ID + 1
        INSERT (ID, COUNTRY_DESC, RCD_INS_TS, RCD_UPD_TS, RCD_START_DI, RCD_CLOSE_DI, RCD_CLOSE_FLG, ID_SUR_KEY) 
        VALUES (SC.ID, SC.COUNTRY_DESC, current_timestamp, current_timestamp, current_date, current_date, 'N', SC.ID + 1)
    WHEN NOT MATCHEN BY TARGET THEN DELETE
    

    但是您的MERGE SQL 的尾部有点乱,我不知道如何解决它,因为我不清楚您要做什么。

    INSERT 应该绑定到 WHEN MATCHED THENWHEN NOT MATCHED THEN 而你的WHEN NOT MATCHEN BY TARGET THEN DELETE 似乎..

    以太应该是WHEN NOT MATCHEN THEN DELETE,但这似乎会干扰插入。

    UPDATE & Insert 最有意义,忽略 DELETE 路径,

    MERGE INTO PRASHANT_DWH.TMP.PRASHANT_DWH_TMP_COUNTRY AS TC
    USING PRASHANT_DWH.STG.PRASHANT_DWH_STG_COUNTRY AS SC
        ON TC.ID = SC.ID 
    WHEN MATCHED THEN 
        UPDATE TC.ID_SUR_KEY = SC.ID + 1
    WHEN NOT MATCHED THEN
        INSERT (ID, COUNTRY_DESC, RCD_INS_TS, RCD_UPD_TS, 
            RCD_START_DI, RCD_CLOSE_DI, RCD_CLOSE_FLG, ID_SUR_KEY) 
        VALUES (SC.ID, SC.COUNTRY_DESC, current_timestamp, 
            current_timestamp, current_date, current_date, 'N', 
            SC.ID + 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2013-01-17
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多