google-bigquery – 基于列的子集避免BigQuery中重复数据的方法是什么?

我正在生成包含应用程序日志数据的CSV文件. CSV文件中的列是timestamp,source_address,destination_url,request_type.当我将CSV文件加载到BigQuery时,它只是将CSV中的数据附加到BigQuery中的现有表中.我想避免重复的source_address,destination_url,request_type集,并简单地跟踪这样一个集的最新时间戳.

我想到这样做的一种方法是GROUP BY source_address,destination_url,request_type并获取MAX(时间戳),但这意味着我必须将该查询保存到一个新表中,然后我可以随后查询然后复制它回到我定期加载CSV文件的原始表中.

有没有更好的方法来做到这一点?重复是没有问题的,除了谷歌收取查询完成的数据的事实.

—-编辑#1 —-

我也完全愿意在加载到BiqQuery之前对CSV数据进行重复数据删除,所以如果有人对如何使用命令行工具有任何很好的想法,根据某些列索引或某些内容来管理CSV文件就像我喜欢听到他们一样.

—-编辑#2 —-

好吧,所以我一直在使用sort命令修补一下,我想我可能会做些什么,但我想要别人的意见来证实.是sort -t,-k1,1 -r logfile.csv |排序-u -t,-k2,4做我想要的?这种方法仍然需要我创建一个新表,而不是每次我想加载新数据时附加,但如果没有其他选项,那就没关系.

最佳答案 你建议的第一种方式通常是最好的选择.如果您有大量数据,则可能需要GROUP EACH BY而不是GROUP BY.

点赞