【问题标题】:ID_DETAILS column from the ab and bc tables as per the image shown根据显示的图像,来自 ab 和 bc 表的 ID_DETAILS 列
【发布时间】:2020-07-09 03:24:01
【问题描述】:

表:AB

AP_ID   UPDT_BY_ID   UPDT_DATE
9848         923     '2019-09-14 21:09'
3242         427     '2019-09-15 21:09'
7845         514     '2019-09-16 21:09'

表:BC

AP_ID   CREATED_BY_ID   CREATED_DT
1234     123            '2019-08-21 20:30'
5678     456            '2019-08-22 20:30'
2468     789            '2019-08-23 20:30'

我需要帮助的输出表:ABC

TABLE_NAME   ID_DETAILS                   SRC_DATE              RUN_DATE
AB           AP_ID:9849,UPDT_BY_ID:923    '2019-09-14 21:09'    '2020-03-28'
AB           AP_ID:3242,UPDT_BY_ID:427    '2019-09-15 21:09'    '2020-03-28'
AB           AP_ID:7845,UPDT_BY_ID:514    '2019-09-16 21:09'    '2020-03-28'
AB           AP_ID:1234,UPDT_BY_ID:123    '2019-08-21 21:09'    '2020-03-28'
AB           AP_ID:5678,UPDT_BY_ID:456    '2019-08-22 21:09'    '2020-03-28'
AB           AP_ID:2468,UPDT_BY_ID:789    '2019-08-23 21:09'    '2020-03-28'

我需要创建表:ABC from ABBC 按照上面的雪花表 ABC 表中的ID_DETAILS 列应为 JSON 格式。

【问题讨论】:

  • 如何使用 CTE 或 union 将数据组合在一起并使用 parse_json 函数以将转换为 VARIANT 的格式构造输入(这是您希望此 ID_DETAILS 列转换为的数据类型如果它作为 JSON 存储/卸载)。这里有一个使用 parse_json 的好例子:docs.snowflake.com/en/sql-reference/functions/…
  • 请不要将图片用于可以在markdown中简单格式化的数据,因为它会为其他人处理您的问题付出更多的努力。

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


【解决方案1】:
WITH tabe_ab AS (
  SELECT * FROM VALUES 
    (9848, 923, '2019-09-14 21:09'::timestamp_ntz),
    (3242, 427, '2019-09-15 21:09'::timestamp_ntz),
    (7845, 514, '2019-09-16 21:09'::timestamp_ntz)
    d(AP_ID, UPDT_BY_ID, UPDT_DATE)
), table_bc AS (
  SELECT * FROM VALUES
    (1234, 123, '2019-08-21 20:30'::timestamp_ntz),
    (5678, 456, '2019-08-22 20:30'::timestamp_ntz),
    (2468, 789, '2019-08-23 20:30'::timestamp_ntz)  
    b(AP_ID, CREATED_BY_ID, CREATED_DT)
), data_union AS (
    SELECT 'AB' as table_name
        ,AP_ID
        ,UPDT_BY_ID
        ,UPDT_DATE as SRC_DATE
    FROM tabe_ab
    UNION ALL
    SELECT 'BC' as table_name
        ,AP_ID
        ,CREATED_BY_ID AS UPDT_BY_ID
        ,CREATED_DT as SRC_DATE
    FROM table_bc
)
SELECT table_name
   ,OBJECT_CONSTRUCT('AP_ID',AP_ID,'UPDT_BY_ID',UPDT_BY_ID) AS id_details
   ,SRC_DATE
   ,CURRENT_DATE
FROM data_union
order by 1,3;

给出结果:

TABLE_NAME  ID_DETAILS  SRC_DATE    CURRENT_DATE
AB  {    "AP_ID": 9848,    "UPDT_BY_ID": 923  } 2019-09-14 21:09:00.000 2020-03-29
AB  {    "AP_ID": 3242,    "UPDT_BY_ID": 427  } 2019-09-15 21:09:00.000 2020-03-29
AB  {    "AP_ID": 7845,    "UPDT_BY_ID": 514  } 2019-09-16 21:09:00.000 2020-03-29
BC  {    "AP_ID": 1234,    "UPDT_BY_ID": 123  } 2019-08-21 20:30:00.000 2020-03-29
BC  {    "AP_ID": 5678,    "UPDT_BY_ID": 456  } 2019-08-22 20:30:00.000 2020-03-29
BC  {    "AP_ID": 2468,    "UPDT_BY_ID": 789  } 2019-08-23 20:30:00.000 2020-03-29

对于您的实际表格,您只需使用 CTE 部分

WITH data_union AS (
    SELECT 'AB' as table_name
        ,AP_ID
        ,UPDT_BY_ID
        ,UPDT_DATE as SRC_DATE
    FROM ab
    UNION ALL
    SELECT 'BC' as table_name
        ,AP_ID
        ,CREATED_BY_ID AS UPDT_BY_ID
        ,CREATED_DT as SRC_DATE
    FROM bc
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多