Google BigQuery没有主键或唯一约束.
我们不能使用传统的SQL选项,例如,insert ignore或者insert on duplicate key update如何防止将重复记录插入到Google BigQuery中?
如果我必须首先调用delete(基于我自己系统中的唯一键),然后插入以防止重复记录被插入bigquery,那不会太低效吗?我认为插入是最便宜的操作,没有查询,只是附加数据.对于每个插入,如果我必须调用删除,它将是太低效并且花费我们额外的钱.
根据您的经验,您有什么建议和建议?
bigquery有主键会很好,但它可能与bigquery基于的算法/数据结构冲突?
sea*_*ain 14
“批量删除和插入”是我用来避免重复记录的方法。谷歌自己的“Youtube BigQuery Transfer Services”也在使用“批量删除和插入”。
“Youtube BigQuery Transfer Services”每天将每日报告推送到同一组报告表。每条记录都有一个“日期”列。
当我们运行 Youtube Bigquery Transfer 回填时(要求 youtube bigquery Transfer 再次推送特定日期的报告。)Youtube BigQury Transfer 服务将首先删除报告表中该日期的完整数据集,然后插入该日期的完整数据集再次到报告表。
另一种方法是先删除结果表(如果已经存在),然后重新创建结果表并将结果重新输入到表中。我经常使用这种方法。每天,我都会将过程数据结果保存在每日数据集中的一些结果表中。如果我在那天重新运行该过程,我的脚本将检查当天的结果表是否存在。如果当天存在表,则将其删除,然后重新创建一个新表,然后将处理结果重新输入到新创建的表中。
Pen*_*m10 11
所以,让我们首先明确一些事实.
Bigquery是一个适用于大型数据集的托管数据仓库,它不是传统数据库的替代品.
您每天最多只能对表执行96次DML(更新,删除)操作.这是设计的.它很低,因为它迫使你像BQ一样思考数据湖.
所以在Bigquery上你实际上让每个数据都进入,一切都只是通过设计追加.这意味着通过设计,您拥有一个数据库,可以为每次更新保留一个新行.因此,如果要使用最新数据,则需要选择最后一行并使用它.
我们实际上利用了我们添加到同一行的每个新更新的见解.例如,我们可以检测最终用户在注册流程中选择国家的时间.因为我们有一个国家的下拉,它滚动到他的国家花了一些时间,并且指标显示了这一点,因为我们最终在BQ中有两行,一个选择了一个国家,一个选择了国家,并且基于时间选择我们是能够优化过程.现在,在我们国家/地区的下拉列表中,我们列出了最近/最常见的5个国家/地区,因此这些用户不再需要滚动和选择国家/地区,而且速度更快.
| 归档时间: |
|
| 查看次数: |
10457 次 |
| 最近记录: |