在 BigQuery 中计算不同的 concat

Posted

技术标签:

【中文标题】在 BigQuery 中计算不同的 concat【英文标题】:count distinct concat in BigQuery 【发布时间】:2019-12-09 11:14:37 【问题描述】:

我试过 PostgreSQL:count distinct (col1,col2,col3,col4,col5) 在 BigQuery 中:Count distinct concat(col1,col2,col3,col4,col5)

我的情况是我需要在 BigQuery 中获得与 PostgreSQL 相同的结果

虽然这种情况适用于 3 列,但我没有得到与 PostgreSQL 相同的 5 列值。

示例查询:

 select col1,
count(distinct concat((col1,col2,col3,col4,col5)
from table A
group by col1

当我删除 distinct 和 concat 时,简单的 count(col1,col2,col3,col4,col5) 会给出 PostgreSQL 中填充的精确值。但我需要区分这些列。有什么办法可以做到这一点? bigquery concat 的工作方式是否不同?

【问题讨论】:

请显示示例输入和输出。 奥卡姆剃刀:数据不同。你提前知道答案吗?如果不是,您是否证明不同数据库中的数据实际上是相同的? 【参考方案1】:

BigQuery 标准 SQL 的以下几个选项

#standardSQL
SELECT col1,
  COUNT(DISTINCT TO_JSON_STRING((col1,col2,col3,col4,col5)))
FROM A
GROUP BY col1   

#standardSQL
SELECT col1,
  COUNT(DISTINCT FORMAT('%T', [col1,col2,col3,col4,col5]))
FROM A
GROUP BY col1

【讨论】:

【参考方案2】:

适用于许多不支持COUNT DISTINCT 形式的数据库的替代方案:

SELECT COUNT(*)
FROM (
  SELECT DISTINCT Origin, Dest, Reporting_Airline 
  FROM `fh-bigquery.flights.ontime_201908` 
  WHERE FlightDate_year = "2018-01-01" 
)

我对为什么 CONCAT 在您的示例中不起作用的猜测:您有任何空列吗?

【讨论】:

以上是关于在 BigQuery 中计算不同的 concat的主要内容,如果未能解决你的问题,请参考以下文章

计算不同行的总和并保存在单行 BigQuery 中

计算上一期而不是下一期购买的不同客户 Bigquery

firebase 和 BigQuery 的保留结果不匹配

如何计算 Google BigQuery 中多列的中位数?

BigQuery 计算多列值之间的重叠百分比

如何根据bigquery中另一列中的重复值计算一列