【发布时间】:2017-04-27 19:36:44
【问题描述】:
我正在尝试加入两个表,每个表都有一个如下所示的数组列
SELECT a.id, b.value
FROM a INNER JOIN b
ON a.array IN b.array
或
SELECT a.id, b.value
FROM a INNER JOIN b
ON UNNEST(a.array) IN UNNEST(b.array)
根据this SO question,postgres 有像 和 >@ 这样的运算符来比较其中一个是否是另一个数组的子集( postgres doc page) 但 BigQuery 只允许将数组的一个元素与另一个数组进行比较,如下所示
a.arrayelement IN UNNEST(b.array)
可以在 BigQuery 中完成吗?
编辑
这是我正在使用的架构
WITH b AS (
{ "ip": "192.168.1.1",
"cookie": [
{ "key": "apple",
"value: "red"
},
{ "key": "peach",
"value: "pink"
},
{ "key": "orange",
"value: "orange"
}
]
}
,{ "ip": "192.168.1.2",
"cookie": [
{ "key": "apple",
"value: "red"
},
{ "key": "orange",
"value: "orange"
}
]
}
),
WITH a AS (
{ "id": "12345",
"cookie": [
{ "key": "peach",
"value: "pink"
}
]
}
,{ "id": "67890",
"cookie": [
{ "key": "apple",
"value: "red"
},
{ "key": "orange",
"value: "orange"
},
]
}
)
我期待如下输出
ip, id
192.168.1.1, 67890
192.168.1.2, 67890
192.168.1.2, 12345
它是以下 SO 的延续, How do I find elements in an array in BigQuery 。 我尝试使用子查询来比较其中一个数组的单个元素,但 BigQuery 返回一个错误,提示我有 “子查询太多”
【问题讨论】:
-
取决于实际的数组模式 - 这样做可以有不同的选择。您能否提供您的具体示例,这样就无需猜测要显示哪个选项
-
@MikhailBerlyant 始终感谢您的帮助。我添加了架构
-
以及基于该示例的预期输出是什么?
标签: google-bigquery