【问题标题】:pass results between queries and display joint results ( google bigquery )在查询之间传递结果并显示联合结果(google bigquery)
【发布时间】:2020-01-27 21:07:14
【问题描述】:

我想查询q1,并在第二个查询q2 上使用q1 的结果。 我想显示q1q2的所有列,以便结果基于一个公共列。

(如果标题不是很清楚,请告诉我)

下面的示例应在q1 中显示列 [idpublisherauthor]。 我想将它们传递给q2,检索q1id 列中所有项目的属性[idcited_idcategory]。

作为结果,对于每个 id,我想显示所有被引用 ID 及其属性(包括 ID 和被引用 ID)。

或者,为了更清楚起见,也可以为每个 id 检索一个被引用的 ID 数组,在单独的查询中,我将用它们的属性装饰我的 id 和被引用的 ID。

还请就“性能”提出建议(我正在使用 bigquery,所以如果您能解释为什么解决方案更有效,有助于节省计算资源!)。

我想出了这个,但无法显示 q1 的所有列。

WITH q1 AS (

    SELECT id, publisher, a.name
         FROM `db.publications`,
         UNNEST (publisher) as h,
         UNNEST (author) as a
         WHERE h Like '%penguin%'
)
SELECT p.id, c.id AS Cited, c.Category AS Cat 
     FROM `db.publications` AS p, UNNEST(citation) AS c 
     WHERE p.id IN (SELECT id from q1)

样本数据:

# result of q1
Row | Id | Publisher | Author
1   | item0 | penguin | Bob
2   | item0 | penguin | Alice
3   | item1 | penguin | Charlie

我想查找 q1 中每个唯一项目(item0,item1)引用的其他项目。

我希望得到一种可以以这种方式使用的方便格式的结果:

# Citations: books mentioned by item0, item1 ... 
item0 : [item10, item15, item100]
item1 : [item23, item0, item101, item15]
..

# Decorators : information about each book:
Row | Id | Publisher | Author(s) |  

我的问题是可以在一个查询中实现两者吗? 如果是这样,将两个单独的查询拆分为较低的计算资源是否方便或更好? 我的方法是首先查询一组书籍及其装饰器,然后使用 id 列表查找它们的引用。我无法将装饰器与上面的示例一起携带。

【问题讨论】:

  • 样本数据和所需结果将提供更好的清晰度。
  • 我不清楚表格中的数据最初是怎样的。你只有一两张桌子吗?你能举个例子吗? If is just one 您想要实现的目标可能只需要一个查询即可。

标签: sql performance google-bigquery with-statement


【解决方案1】:

关于问题的第一部分,不要使用where p.id in(select id from q1),而是使用连接来引入q1 字段。

WITH q1 AS (

    SELECT id, publisher, a.name
         FROM `db.publications`,
         UNNEST (publisher) as h,
         UNNEST (author) as a
         WHERE h Like '%penguin%'
),
joined as (
  select id, p.citation, q1.publisher, q1.name
  from `db.publications` p
  inner join q1 using(id)
)
select id, c.id as Cited, c.Category as Cat
from joined
left join unnest(citation) c

【讨论】:

    猜你喜欢
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2020-06-20
    • 1970-01-01
    • 2016-01-12
    • 2016-05-25
    相关资源
    最近更新 更多