Snowflake - 将列值拆分为多列

问题描述 投票:0回答:1

必须从阶段表中提取数据,其中数据位于单列中,以逗号作为分隔符。

数据原样 “pBKey、pBIdentifier、pBDateTime、商店、描述、DeptComm、提供商、OrderReferenceNumber、、、、” “XY-XYX-1234”,“规则-XYZ-XYZ”,20240401,“TWXY”,,,,,“XYZXWENZ”

在此输入图片描述

产出 在此输入图片描述

尝试了 SPLIT_TO_TABLE 和 Pivot 的组合,但结果不符合预期。

SQL:
DECLARE 
  col_list STRING DEFAULT (
    SELECT CONCAT('(',LISTAGG(VALUE_COL, ','),')) ORDER BY 1') AS RESULTSTRING FROM 
    (SELECT DISTINCT VALUE_COL FROM CSV_TEST ORDER BY 1) AS TMP);
   SQL_TO_EXECUTE STRING;
   RS RESULTSET;
BEGIN
  SQL_TO_EXECUTE := $$ 
SELECT *  FROM
(  
  SELECT SEQ as ID, TRIM(F1.VALUE) AS COLNAME, INDEX AS VALUE_COL
    FROM DATA_LOCATION S
    , LATERAL SPLIT_TO_TABLE(AS_VARCHAR(S.MESSAGE), ',') F1   
)SRC
PIVOT(
      MIN(COLNAME) FOR VALUE_COL IN $$ || col_list ; 
    RS := (EXECUTE IMMEDIATE SQL_TO_EXECUTE);
  RETURN TABLE(RS);
END;

结果: 在此输入图片描述

需要删除标题列并将第二行作为标题。

如何得到预期的结果?任何帮助将不胜感激。

在此输入图片描述

snowflake-cloud-data-platform
1个回答
0
投票

如果列数固定,您可以使用 Strtok_To_Array 如下

select fld1[0] pBKey , fld1[1] as pBDateTime, fld1[2] as Store,
fld1[3] as Description from(
SELECT STRTOK_TO_ARRAY('XY-XYX-1234, RULE-XYZ-XYZ,20240401, TWXY', ',') fld1
);
© www.soinside.com 2019 - 2024. All rights reserved.