如何将 JSON 字典列表转换为 Snowflake 中的字符串列表?

Posted

技术标签:

【中文标题】如何将 JSON 字典列表转换为 Snowflake 中的字符串列表?【英文标题】:How can I convert a JSON list of dicts to a list of strings in Snowflake? 【发布时间】:2020-06-25 08:36:10 【问题描述】:

我有一个 Snowflake 表,其中包含一个 id 列和一个 favorite_books 列。 favorite_books 列包含 JSON 格式的字典列表。每个字典都有一个title 和一个ISBN 属性:

ID | favorite_books
--------------------
42 | ["title": "LotR", "ISBN": "9780261102354", "title": "HP1", "ISBN": "9780545582889"]
13 | ["title": "Faust", "ISBN": "9780192835956"]

我的实际情况更复杂,但缺少的部分是仅选择标题。所以结果应该是:

ID | favorite_books
--------------------
42 | ["LotR", "HP1"]
13 | ["Faust"]

我看到了Querying Semi-Structured Data,但我仍然不知道该怎么做。

【问题讨论】:

这能回答你的问题吗? How can I apply a function to each element of a array column? 【参考方案1】:

适配an existing answer for a similar data structure,你可以这样尝试(使用CTE,分解数组,然后根据ID重新组合成一个新数组):

with elements as (
    select ID, elements.value:title as title
    from table_name, LATERAL FLATTEN(input => favorite_books) elements
)
select elements.ID, ARRAY_AGG(elements.title) as favorite_books from elements
group by ID;

或者通过更直接的 javascript UDF(只是转换数组):

create or replace function extract_titles(A array)
  returns array
  language javascript
  strict
  as
  $$
    return A.map(function(d) return d.title);
  $$
;

select ID, EXTRACT_TITLES(favorite_books) as favorite_books from table_name;

【讨论】:

以上是关于如何将 JSON 字典列表转换为 Snowflake 中的字符串列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将返回的python JSON字典转换为字典中的列表,并将数据转换为SQL插入

Python:将字典列表转换为 json

我有嵌套的dict变量列表,需要将其转换为Json对象的dict变量类型

将包含字典的列表字典转换为数据帧

如何将嵌套的json结构转换为数据框

如何使用 Jersey 将嵌套列表编组为 JSON?我得到一个空数组或一个包含数组的单元素字典数组