【问题标题】:Bigquery select non duplicate recordsBigquery 选择不重复的记录
【发布时间】:2015-09-27 06:30:51
【问题描述】:

考虑下表(简化版):

id int,
amount decimal,
transaction_no,
location_id int,
created_at datetime

上述架构用于存储餐厅的 POS 收据。现在,此表有时会包含同一日期、同一 transaction_no 在同一 location_id 的收据。

在这种情况下,我想做的是获取该 location_idtransaction_no 订单的最后收据created_at desc

在 MySQL 中,我使用以下查询让我最后一次获得(max(created_at) 收据,用于 location_idtransaction_no

SELECT id, amount, transaction_no, location_id, created_at
 FROM receipts r JOIN
 (SELECT transaction_no, max(created_at) AS maxca
  FROM receipts r
  GROUP BY transaction_no
 ) t
 ON r.transaction_no = t.transaction_no AND r.created_at = t.maxca
group by location_id;

但是当我在 BigQuery 中运行相同的程序时,我收到以下错误:

查询失败错误:Shuffle 已达到表 __I0 的广播限制 (至少广播 150393576 字节)。考虑使用分区 加入而不是广播加入。职位编号: 循环要点812:job_A_CfsSKJICuRs07j7LHVbkqcpSg

知道如何在 BigQuery 中使用上述查询吗?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:
    SELECT id, amount, transaction_no, location_id, created_at 
    FROM (
      SELECT 
      id, amount, transaction_no, location_id, created_at, 
      ROW_NUMBER() OVER(PARTITION BY transaction_no, location_id 
                        ORDER BY created_at DESC) as last
      FROM your_dataset.your_table
    )
    WHERE last = 1
    

    【讨论】:

    • 这给了我扁平的输出。有没有办法可以保持嵌套结构?我已经取消选中 bigquery web ui 中的 Flatten results 选项
    猜你喜欢
    • 2014-01-14
    • 2011-08-05
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多