使用 Big Query,我如何在一条记录中查询多个对象?
Posted
技术标签:
【中文标题】使用 Big Query,我如何在一条记录中查询多个对象?【英文标题】:Using Big Query, how can I query within a record for multiple objects? 【发布时间】:2018-06-20 19:16:38 【问题描述】:下面是我正在使用的结构。它是来自 firebase 的 Google Analytic 事件。
我需要 AND
穿过 params 数组,并只返回一个带有“eventData”键的参数值。同时我需要通过在同一个 params 数组中找到的另外两个对象(具有键值 'peripheral' 和 'eventType')来限制查询。
我正在使用旧版 SQL,但愿意使用其他东西。我看着并玩了 FLATTEN,但这似乎并没有给我最终想要的东西。 查询示例可能更有意义。
SELECT event_dim.params.value.int_value -- this needs to come from the eventData object
FROM
[table]
where event_dim.name = 'EPILOG_BAT'
AND event_dim.timestamp_micros > 1529423373498009
-- AND event_dim.params contains (key='peripheral', string_value = 'CA5D6D4C-9B4C-9BB1-03CF-5A8BCD7651FE')
-- AND event_dim.params contains (key='eventType', string_value = 'V')
order by event_dim.timestamp_micros ,
event_dim.params.key
我希望得到的行是 4105
数据:
"event_dim": [
"date": "20180620",
"name": "EPILOG_BAT",
"params": [
"key": "eventData",
"value":
"string_value": null,
"int_value": "4105",
"float_value": null,
"double_value": null
,
"key": "peripheral",
"value":
"string_value": "CA5D6D4C-9B4C-9BB1-03CF-5A8BCD7651FE",
"int_value": null,
"float_value": null,
"double_value": null
,
"key": "eventTime",
"value":
"string_value": null,
"int_value": "1529499380000",
"float_value": null,
"double_value": null
,
"key": "eventType",
"value":
"string_value": "V",
"int_value": null,
"float_value": null,
"double_value": null
,
"key": "firmwareVersion",
"value":
"string_value": "0.8.6\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"int_value": null,
"float_value": null,
"double_value": null
],
"timestamp_micros": "1529478561132285",
"previous_timestamp_micros": "1529478560856003",
"value_in_usd": null
,
【问题讨论】:
您的 JSON 文件是否正确?我试图导入它,试图帮助你,但我不能。就像它一样,它不是一个有效的 JSON,即使在尝试“修复它”之后,Big Query 也无法识别它。 @Mangu 可能不是,记录太大,无法包含。这是记录的要点。我从 bigquery ui 将其复制为 json。 gist.github.com/anwarhamr/c08a66db6e91535376d4598180156d60 为什么在查询示例中的 2 个 AND 条件之前使用 2 个破折号?您确定您使用的是旧版 SQL 吗?如果您使用的是标准 SQL,则 2 个破折号是 cmets,您没有对其进行过滤。你能澄清一下吗? @J.LValtueña 我很清楚注释掉代码,是的,这对于示例是有意的;包含时查询失败。是的,我确定它是 Legacy,因为它与选项中设置的 Legacy 复选框一起工作。如果您有解决方案,它可以是旧版 SQL 或标准 SQL 【参考方案1】:可能是这样的(请原谅我的格式):
#standardSql
SELECT
(SELECT params.value.int_value FROM event.params WHERE params.key =
'eventData') AS id
FROM `data_source`,
UNNEST(event_dim) AS event,
UNNEST(event.params) AS params
WHERE event.name = 'EPILOG_BAT'
AND event_dim.timestamp_micros > 1529423373498009
AND (SELECT params.value.string_value FROM event.params WHERE params.key =
'peripheral') = 'CA5D6D4C-9B4C-9BB1-03CF-5A8BCD7651FE'
AND (SELECT params.value.string_value FROM event.params WHERE params.key =
'eventType') = 'V'
【讨论】:
@Robel Robel Lingstuyl 这个答案对你有用吗?以上是关于使用 Big Query,我如何在一条记录中查询多个对象?的主要内容,如果未能解决你的问题,请参考以下文章
Google Big Query Error: CSV table 遇到太多错误,放弃。行:1 错误:1
如何在 Google Big Query 中正确使用 GROUP BY 命令?