Google bigquery 如何禁止将重复行加载到BigQuery?

Google bigquery 如何禁止将重复行加载到BigQuery?,google-bigquery,Google Bigquery,我想知道是否有办法禁止BigQuery中的重复项 基于此,我可以消除表的整个或分区的重复数据 要删除整个表的重复数据,请执行以下操作: CREATE OR REPLACE TABLE `transactions.testdata` PARTITION BY date AS SELECT DISTINCT * FROM `transactions.testdata`; 要基于WHERE子句中定义的分区消除表中的重复数据,请执行以下操作: MERGE `transactions.testdata`

我想知道是否有办法禁止BigQuery中的重复项

基于此,我可以消除表的整个或分区的重复数据

要删除整个表的重复数据,请执行以下操作:

CREATE OR REPLACE TABLE `transactions.testdata`
PARTITION BY date
AS SELECT DISTINCT * FROM `transactions.testdata`;
要基于
WHERE
子句中定义的分区消除表中的重复数据,请执行以下操作:

MERGE `transactions.testdata` t
USING (
  SELECT DISTINCT *
  FROM `transactions.testdata`
  WHERE date=CURRENT_DATE()
)
ON FALSE
WHEN NOT MATCHED BY SOURCE AND date=CURRENT_DATE() THEN DELETE
WHEN NOT MATCHED BY TARGET THEN INSERT ROW

如果无法禁止重复,那么这是消除表中重复数据的合理方法吗?

BigQuery
没有传统DBMS中可以找到的类似约束的机制。换句话说,您不能设置主键或类似的东西,因为
BigQuery
不关注事务,而是关注快速分析和可伸缩性。您应该将其视为一个数据湖,而不是具有唯一性属性的数据库

如果您有一个现有的表,并且需要对其进行重复数据消除,那么上述方法将起作用。如果您需要表在默认情况下具有唯一的行,并且希望以编程方式在表中插入唯一的行,而无需借助外部资源,我可以建议您一种解决方法:

  • 首先将数据插入到临时表中
  • 然后,在临时表中运行查询,并将结果保存到实际表中。此步骤可以通过一些不同的方式以编程方式完成:

    • 使用您提到的方法作为
    • 使用诸如
      bq query--use_legacy_sql=false--destination_table='select distinct*from'
      之类的命令,将查询临时表中的不同值,并将结果加载到
      --destination_table
      属性中指向的目标表中。值得一提的是,这种方法也适用于分区表
  • 最后,删除临时表。与前一步一样,此步骤可以使用预定查询或bq命令完成


  • 我希望它能有所帮助

    BigQuery
    没有像传统DBMS中的约束那样的机制。换句话说,您不能设置主键或类似的东西,因为
    BigQuery
    不关注事务,而是关注快速分析和可伸缩性。您应该将其视为一个数据湖,而不是具有唯一性属性的数据库

    如果您有一个现有的表,并且需要对其进行重复数据消除,那么上述方法将起作用。如果您需要表在默认情况下具有唯一的行,并且希望以编程方式在表中插入唯一的行,而无需借助外部资源,我可以建议您一种解决方法:

  • 首先将数据插入到临时表中
  • 然后,在临时表中运行查询,并将结果保存到实际表中。此步骤可以通过一些不同的方式以编程方式完成:

    • 使用您提到的方法作为
    • 使用诸如
      bq query--use_legacy_sql=false--destination_table='select distinct*from'
      之类的命令,将查询临时表中的不同值,并将结果加载到
      --destination_table
      属性中指向的目标表中。值得一提的是,这种方法也适用于分区表
  • 最后,删除临时表。与前一步一样,此步骤可以使用预定查询或bq命令完成


  • 我希望这会有所帮助

    您如何将数据加载到BigQuery?我正在使用Python BigQuery API。您如何将数据加载到BigQuery?我正在使用Python BigQuery API。