簡體   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