我正在生成包含应用程序日志数据的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(timestamp)
,但这意味着我必须将该查询保存到一个新表中,然后我可以随后查询然后将其复制回我定期将CSV文件加载到原始表中。
有没有更好的方法来做到这一点?重复是没有问题的,除了Google收取查询完成数据的事实。
----编辑#1 ----
我也完全愿意在加载到BiqQuery之前对CSV数据进行重复数据删除,所以如果有人对如何使用命令行工具有任何很好的想法,可以根据某些列索引来管理CSV文件或我喜欢听到他们之类的东西。
----编辑#2 ----
好的,所以我一直在用sort
命令修补一下,我想我可能会做些什么,但我希望别人的意见得到证实。 sort -t, -k1,1 -r logfile.csv | sort -u -t, -k2,4
正在做我想做的事吗?这种方法仍然需要我创建一个新表,而不是每次我想加载新数据时附加,但如果没有其他选项,那就没关系。
答案 0 :(得分:2)
您建议的第一种方式通常是最佳选择。如果您有大量数据,则可能需要GROUP EACH BY
而不是GROUP BY
。