BigQuery:需要在相关子查询中返回记录类型的唯一值

Posted

技术标签:

【中文标题】BigQuery:需要在相关子查询中返回记录类型的唯一值【英文标题】:BigQuery: need to return unique values for Record Type in a correlated subquery 【发布时间】:2020-07-15 11:06:42 【问题描述】:

我有一个这种格式的大查询表

我有这种格式的表的记录值:

相同的实例 ID 和项目 ID 可以以不同的时间序列重复任意次数。我正在尝试一个 select 语句,它将为每一行返回一个值(无 cartestian 产品)

输出喜欢

 InstanceId    ProjectId Time
    
    2763333     manage-x 10:30
    2763333     manage-x 11:30
    2763334     manage-y 10:30

因为这是一个记录类型,所以我试过这个表名是metric

select res.value from metric,unnest(resource.labels) as res where res.key="instance_id"

这给了我 2763339646023081 的正确值

现在我想在同一个语句中获取 project_id,所以我需要一个类似于 sql 的相关子查询

select res.value from metric,unnest(resource.labels) as res,(select proj.value from metric,unnest(resource.labels) as proj where proj.key="project_id" and this part i need help to refer the res.value(instance_id) from the outer query to match to the corresponding instance for the project_id in the inner query)) where res.key="instance_id"

所以如上所示,我不确定如何在内部子查询中引用 instance_id 来获取相应的 project_id,我对 BigQuery 很陌生,我尝试了各种连接组合,但它不起作用并给了我 cartestian 产品.请提出您的建议和帮助。谢谢

【问题讨论】:

谁能帮助解决这个问题?谢谢 【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT 
  (SELECT value FROM UNNEST(resource.labels) AS res WHERE key = 'instance_id') AS instance_id,
  (SELECT value FROM UNNEST(resource.labels) AS res WHERE key = 'project_id') AS project_id
FROM `project.dataset.metric`

【讨论】:

谢谢,我从这个答案中得到了提示

以上是关于BigQuery:需要在相关子查询中返回记录类型的唯一值的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:从表连接引起的子选择中删除记录

BigQuery - 联合上的相关子查询不起作用

BigQuery 相关子查询 - 将数组转换为数组

BigQuery - 相关子查询取消嵌套数组不起作用

基于 SQL (BigQuery) 中的多列返回许多小数据样本

BigQuery 为子查询返回 null