无论如何将存储桶中的数据合并到一个表中但没有任何重复的行?

时间:2017-11-09 02:28:54

标签: google-bigquery google-cloud-storage

我在谷歌存储桶中有数百个CSV文件。我每天添加更多数据,然后使用此bq命令重新加载表:

$ bq  load  --replace  --project_id=my_proj-123  my_dataset_id.fav_table gs://my_bucket/table_data/*  <my schema>

不幸的是,我的一些数据有重复数据。有没有办法加载表但没有重复的行?

1 个答案:

答案 0 :(得分:2)

您无法使用bq命令阻止在BigQuery表中插入重复项。但你可以manually remove the duplicates after insertion

#standardSQL
SELECT
  MAX(count) FROM(
  SELECT
    [ID_COLUMN],
    count(*) as count
  FROM
    `[TABLE_NAME]`
  GROUP BY
    [ID_COLUMN])

此查询返回最大数量的重复条目,基于id列。当然,您必须具有唯一标识符,该标识符将定义数据集中的副本(在这种情况下,重复项是具有相同id值列的行)。

如果查询的返回值> 1,则表示存在重复项。然后,通过运行以下查询:

#standardSQL
SELECT
  * EXCEPT(row_number)
FROM (
  SELECT
    *,
    ROW_NUMBER()
          OVER (PARTITION BY [ID_COLUMN]) row_number
  FROM
    `[TABLE_NAME]`)
WHERE
  row_number = 1

您将收到表格的无副本版本。同样,通过id列和帮助列row_number识别和解除重复项。请注意,然后建议将结果写入新表(没有更改原始表,只选择非重复数据)。

此外,这个问题在这里有部分答案: https://stackoverflow.com/a/43587206/3615567