Google bigquery 如何在单个条目匹配时选择整个记录
我有一个案例,我需要聚合数据,并且在每一行中嵌套了一条记录。我想做的是查看记录中的条目是否匹配,然后返回整个记录,因为我对其中的其他数据感兴趣。这是我所拥有的数据的基本模式Google bigquery 如何在单个条目匹配时选择整个记录,google-bigquery,Google Bigquery,我有一个案例,我需要聚合数据,并且在每一行中嵌套了一条记录。我想做的是查看记录中的条目是否匹配,然后返回整个记录,因为我对其中的其他数据感兴趣。这是我所拥有的数据的基本模式 |- name |- age +- properties (repeated) | |- key | |- value 所以选择这样一个 SELECT <some-columns> FROM <table> WHERE propeties.key = "candy" 选
|- name
|- age
+- properties (repeated)
| |- key
| |- value
所以选择这样一个
SELECT
<some-columns>
FROM
<table>
WHERE
propeties.key = "candy"
选择
从…起
哪里
properties.key=“糖果”
将只返回记录的键与“candy”匹配而不是与“game”匹配的行。希望这能清楚地说明我的问题。您使用的是SQL吗
“财产”的真实结构是什么
您应该使用内部联接来查找“candy”
然后一个外部连接来匹配“游戏”,并只保留那些为空的
SELECT id, name, age
FROM table
INNER JOIN properties AS p1
ON table.id = p1.table_id AND p1.value = "candy"
LEFT OUTER JOIN properties AS p2
ON table.id = p2.table_id AND p2.value = "game"
WHERE p2.value IS null;
我不知道这是否有效
使用postgresql,sub select非常高效:
SELECT id, name, age
FROM table
INNER JOIN (SELECT table_id FROM PROPERTIES WHERE value = "candy" ) AS p1
ON table.id = p1.table_id
LEFT OUTER JOIN (SELECT table_id FROM PROPERTIES WHERE value = "game" ) AS p2
ON table.id = p2.table_id
WHERE p2.table_id IS null;
在BigQuery中,您可以为此使用OMIT RECORD IF子句:
SELECT
<some-columns>
FROM
<table>
OMIT RECORD IF
EVERY(propeties.key != "candy")
选择
从…起
省略记录,如果
每个(properties.key!=“candy”)
他正在使用BigQuery,“记录”是一种特殊类型,不需要加入。谢谢你的回答@Vouze.Perfect,正是我需要的。非常感谢。