【问题标题】:Google BigQuery - simulate Pandas removeDuplicates() in Google BigQuery SQLGoogle BigQuery - 在 Google BigQuery SQL 中模拟 Pandas removeDuplicates()
【发布时间】:2015-04-26 20:47:36
【问题描述】:

给定一个带有 col_1....col_m 的 Google BigQuery 数据集,您如何使用 Google BigQuery SQL 返回在say... [col1, col3, col7] 中没有重复的数据集,这样当有行时如果在 [col1, col3, col7] 中有重复项,则返回这些重复项中的第一行,其余列中具有重复字段的行全部删除?

示例:removeDuplicates([col1, col3])

    col1 col2 col3
    ---- ---- ----
r1: 20   25   30
r2: 20   70   30
r3: 40   70   30

返回

  col1 col2 col3
  ---- ---- ----
r1: 20   25   30
r3: 40   70   30

使用 python pandas 很容易做到这一点。对于数据框(即矩阵),您调用 pandas 函数removedDuplicates([field1, field2, ...])。但是,removeDuplicates 并未在 Google Big Query SQL 的上下文中指定。

我对如何在 Google Big Query 中执行此操作的最佳猜测是使用 rank() 函数:

https://cloud.google.com/bigquery/query-reference#rank

如果存在,我正在寻找一个简洁的解决方案。

【问题讨论】:

    标签: sql pandas analytics google-bigquery


    【解决方案1】:

    您可以按要从中删除重复项的所有列进行分组,并使用其他列中的FIRST()。也就是说,removeDuplicates([col1, col3]) 将转换为

    SELECT col1, FIRST(col2) as col2, col3 
    FROM table 
    GROUP EACH BY col1, col3
    

    请注意,在 BigQuery SQL 中,如果 col1col3 的不同值超过一百万,则需要 EACH 关键字。

    【讨论】:

    • 完美。这比使用 rank() 的解决方案更优雅。
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多