繁体   English   中英

从数组扁平化雪花中的数据源

[英]Flatten data source in Snowflake from Array

我正在尝试修复数据集中的数组。 目前,我有一个数据集,其中包含多个不同 uuid 的参考编号。 我想要做的是在 Snowflake 中将其展平以使其参考编号为每个 uuid 具有单独的行。 例如

Reference                                       UUID
1) 9f823c2a-ced5-4dbe-be65-869311462f75 "[
                                         ""05554f65-6aa9-4dd1-6271-8ce2d60f10c4"",
                                         ""df662812-7f97-0b43-9d3e-12f64f504fbb"",
                                          ""08644a69-76ed-ce2d-afff-b236a22efa69"",
                                          ""f1162c2e-eeb5-83f6-5307-2ed644e6b9eb"",
                                            ]"

最终应该看起来像:

Reference                                UUID
1) 9f823c2a-ced5-4dbe-be65-869311462f75    05554f65-6aa9-4dd1-6271-8ce2d60f10c4
2) 9f823c2a-ced5-4dbe-be65-869311462f75    df662812-7f97-0b43-9d3e-12f64f504fbb
3) 9f823c2a-ced5-4dbe-be65-869311462f75    08644a69-76ed-ce2d-afff-b236a22efa69
4) 9f823c2a-ced5-4dbe-be65-869311462f75    f1162c2e-eeb5-83f6-5307-2ed644e6b9eb

我刚开始在 Snowflake 工作,所以我是新手。 看起来有一个横向扁平,但这要么不能告诉我我有各种各样的错误。 雪花的文档在这方面有点令人困惑。

虽然FLATTENFLATTEN数组时的正确方法,但原始描述中显示的UUID列值如果解释为 JSON 语法则无效: "[""val1"", ""val2""]"并且在此之前需要更正可以通过将其视为VARIANT类型来应用LATERAL FLATTEN方法。

如果原始描述中的数据样本是文字样本并适用于所有列值,则以下查询将帮助将其转换为有效的 JSON 语法,然后应用横向展平以产生所需的结果:

SELECT
  T.REFERENCE,
  X.VALUE AS UUID
FROM (
  SELECT
    REFERENCE,
    -- Attempts to transform an invalid JSON array syntax such as "[""a"", ""b""]"
    -- to valid JSON: ["a", "b"] by stripping away unnecessary quotes
    PARSE_JSON(REPLACE(REPLACE(REPLACE(UUID, '""', '"'), '["', '['), ']"', ']')) AS UUID_ARR_CLEANED
    FROM TABLENAME) T,
  LATERAL FLATTEN(T.UUID_ARR_CLEANED) X

如果您的数据已经是有效的VARIANT类型,并且在摄取期间为UUID列成功完成了PARSE_JSON ,并且描述中提供的示例只是格式问题,仅在帖子中显示 JSON 无效,那么更简单的版本与上述相同的查询就足够了:

SELECT REFERENCE, X.VALUE AS UUID
FROM TABLENAME, LATERAL FLATTEN(TABLENAME.UUID) X

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM