繁体   English   中英

无法在BigQuery中使用通配符加入

[英]Unable to join using wildcards in BigQuery

我正在尝试在大查询中联接两个表,Table1包含一个ID列,Table2包含一个具有相同ID或多个ID的列,这些列以逗号分隔的长字符串形式出现,例如“ id123,id456,id678”

如果Table1.ID = Table2.ID,我可以将表连接在一起,但这会忽略所有表,其中Table1.ID是Table2.ID中的多个ID之一。 我看过类似的帖子,告诉我使用通配符,例如

on concat('%',Table1.ID,'%') = Table2.ID

但这不起作用,因为它似乎创建了一个包含'%'字符的字符串,并且实际上并未将其用作通配符。

我在BigQuery中使用标准sql,任何帮助将不胜感激

以下示例适用于BigQuery标准SQL

#standardSQL
WITH `project.dataset.table1` AS (
  SELECT 123 id, 'a' test UNION ALL
  SELECT 456, 'b' UNION ALL
  SELECT 678, 'c'
), `project.dataset.table2` AS (
  SELECT 'id123,id456' id UNION ALL
  SELECT 'id678'
)
SELECT t2.id, test
FROM `project.dataset.table2` t2, UNNEST(SPLIT(id)) id2
JOIN `project.dataset.table1` t1
ON CONCAT('id', CAST(t1.id AS STRING)) = id2  

结果如下

Row id              test     
1   id123,id456     a    
2   id123,id456     b    
3   id678           c    

值得怀疑的是,表中是否包含以百分号开头和结尾的值。 =无法识别通配符; like这样:

on Table2.ID like concat('%', Table1.ID, '%')

作为警告。 这种构造通常是性能杀手。 您最好尝试使Table1Table2中的列完全匹配。

暂无
暂无

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

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