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

时间:2018-02-06 10:58:38

标签: sql google-bigquery left-join

我正在尝试在大查询中加入两个表, 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,任何帮助都将不胜感激

2 个答案:

答案 0 :(得分:2)

下面的示例适用于BigQuery Standard 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    

答案 1 :(得分:0)

表格中的值以百分号开头和结尾是值得怀疑的。 =无法识别通配符; like确实:

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

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