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,正是我需要的。非常感谢。