BigQuery:如何获取列中特定字段的值?

Posted

技术标签:

【中文标题】BigQuery:如何获取列中特定字段的值?【英文标题】:BigQuery: How to get the value of specific filed in a column? 【发布时间】:2018-08-18 16:53:35 【问题描述】:

我有一个三列的表。我想从每一列中提取特定字段并添加它们。例如,我想添加 2、33 和 111。

在 BigQuery 中执行此操作的有效/优化方式是什么?

谢谢。

【问题讨论】:

您实际上有一个名为Row 的列吗?如果不是,那么是什么决定了这个顺序? 行不是列。 BigQuery 只是以这种方式存储数据。 那你需要告诉我们如何生成这个订单。不应依赖您所看到的顺序。您希望S1 列确定顺序吗? 我正在使用此查询生成该表。 imgur.com/a/hyLk9IT 【参考方案1】:

一种选择是枢轴方法,如下所示:

SELECT
    MAX(CASE WHEN Row = 2 THEN S1 END) +
    MAX(CASE WHEN Row = 3 THEN S2 END) +
    MAX(CASE WHEN Row = 1 THEN S3 END) AS the_sum
FROM yourTable;

如果您实际上没有Row 列,那么我们可以轻松地在 CTE 中生成一个,使用其他列之一来提供排序,例如

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY S1) Row
    FROM yourTable
)

然后,使用我上面给出的第一个查询,但使用cte 作为表,而不是yourTable

这是一个 SQL Server 的演示,它至少展示了基本逻辑的工作原理:

Demo

【讨论】:

我只是用那个表来理解这个概念。实际上,我有一个超过 10 列的非常大的数据集,我认为这个解决方案不可扩展。 @John 我认为您正在尝试使用像 Excel 电子表格这样的 SQL 表,这意味着设计不好,而不是我的查询不好。 兄弟,你的问题太棒了:)。对此,我真的非常感激。但正如我提到的,我正在学习 bigquery/sql 概念,所以你能告诉我这样做的更好方法/设计是什么。 :) 我很难进一步评论。当您获得更多列时,这里给出的答案会发生什么?为什么它们会失败/变得无法使用? 成功了。对于不理解您的询问,我深表歉意。再次感谢。保持祝福:)【参考方案2】:

我会这样写:

select sum(case when row = 1 then s3
                when row = 2 then s1
                when row = 3 then s2
           end)
from t;

我不认为你可以比没有group by 的聚合更优化。

【讨论】:

我只是用那个表来理解这个概念。实际上,我有一个超过 10 列的非常大的数据集,我认为这个解决方案不可扩展。 谢谢兄弟。 :) @john 。 . .这怎么不是“可扩展的”?

以上是关于BigQuery:如何获取列中特定字段的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Bigquery 中的这个嵌套 JSON 类型列中查询特定的内容

如何在 BigQuery 的标准 SQL 中解析具有不同日期字符串的列中的值

根据另一列中的值更新 BigQuery 中的嵌套数组

如何在bigquery中将一个json列嵌套在另一个列中

如何在 BigQuery 中使用 REGEXP_EXTRACT 仅提取数值?

如何从 MS ACCESS 数据库中的特定行和列中获取值?