【问题标题】:Bigquery select distinct valuesBigquery 选择不同的值
【发布时间】:2015-08-17 03:38:11
【问题描述】:

如何在 Google Bigquery 中选择不同的值?

查询:

SELECT DISTINCT cc_info
FROM user
WHERE date = ?

谢谢!

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    这是实现您的目标(以防其他人需要)的另一种方式,适用于当前的 BigQuery 2020。

    SELECT colname FROM table1
    UNION DISTINCT 
    SELECT colname FROM table2
    UNION DISTINCT
    .
    .
    .
    SELECT colname FROM tableN 
    

    我的参考是this article

    【讨论】:

      【解决方案2】:

      对于所有在 BigQuery 中找到 DISTINCT 方法的人,以及需要对具有大列的表使用唯一字段功能的人来说,使用 tning 中提到的 GROUP BY 是不可能的。

      截至 2020 年,BigQuery 具有 DISTINCT 修饰符。您需要将查询包装为:

      SELECT DISTINCT usr.cc_info
      FROM (
        SELECT *
        FROM user
        WHERE date = ?
      ) usr
      

      这对于从其他 SQL 产品转移的人来说非常方便。

      【讨论】:

        【解决方案3】:
        SELECT COUNT(DISTINCT cc_info)
        FROM user
        WHERE date = ?
        

        不是正确的查询,因为DISTINCT 是统计近似值,不能保证准确。见https://cloud.google.com/bigquery/docs/reference/legacy-sql#countdistinct

        所以更好的方法是

        select EXACT_COUNT_DISTINCT(cc_info) from user where date = ?
        

        【讨论】:

        • 是的,你是对的。 Normal distinct 使用 hyper log log 算法对分布式机器上的 distinct 进行计数。根据您的数据,如果某些近似值是可以的,与 EXACT_COUNT_DISTINCT 相比,COUNT 提供更好的性能。对于一个简单的 COUNT DISTINCT 语句,我真的很欣赏复杂的算法在幕后运行的方式。 cloud.google.com/bigquery/docs/reference/…
        【解决方案4】:

        只需使用 group by,

        SELECT cc_info
        FROM user
        WHERE date = ?
        GROUP BY cc_info
        

        如果您想对可以使用的 DISTINCT 值进行计数,

        SELECT COUNT(DISTINCT cc_info)
        FROM user
        WHERE date = ?
        

        【讨论】:

          【解决方案5】:

          尝试使用group by

          SELECT cc_info
          FROM user
          WHERE date = ?
          group by cc_info
          

          【讨论】:

            【解决方案6】:
            SELECT cc_info
            FROM user
            WHERE date = ?
            GROUP BY cc_info
            

            【讨论】:

            • 如果此解决方案随着您的表变大而停止工作,您可以将GROUP BY 替换为GROUP EACH BY 以提高可扩展性。
            • 是否可以按 * 从表组中选择 *?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-01-13
            • 1970-01-01
            • 2017-10-03
            • 1970-01-01
            • 1970-01-01
            • 2014-12-25
            • 1970-01-01
            相关资源
            最近更新 更多