如何在雪花中使用字符串连接数组

时间:2020-07-22 13:08:58

标签: sql snowflake-cloud-data-platform

我有两个表:

Books和列tag_ids(数组)

Tags和列tag_id(Varchar)

我有一个可视化工具,需要将这些表连接在一起。我唯一可以控制的是联接条件。 问题是我找不到使这种联接起作用的方法。

这是我尝试过的:

FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON (  "tag_ids" =  TO_ARRAY("tag_id")) 

这仅适用于具有一个元素的数组。不适用于以下情况:

tag_ids =

[
  "211d1383-13a6-4bef-85d1-bf5eda11c8a7",
  "2f6c332e-4726-4425-b364-e668e0f56582"
]

tag_id =

 ["211d1383-13a6-4bef-85d1-bf5eda11c8a7"]

试图做:

FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON ( ARRAYS_OVERLAP ("tag_ids" ,  TO_ARRAY("tag_id")) = TRUE ) ) 

我不知道这是否可行,但它确实是证书产品,需要15+的时间才能运行,所以我还是不能使用它。

我正在寻找的基本上是要问

if tag_id exist in tag_ids

我敢肯定有一个简单的解决方案。

2 个答案:

答案 0 :(得分:1)

展开数组和join

select b.*, t.*
from public.books b cross join
     table(flatten(b.tags)) bt join
     tags t
     on bt.tags = t.tag_id;

答案 1 :(得分:1)

您要使用array_contains函数。

FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON (array_contains(tag_id, tag_ids))

请参阅文档here