我在谷歌存储桶中有数百个CSV文件。我每天添加更多数据,然后使用此bq
命令重新加载表:
$ bq load --replace --project_id=my_proj-123 my_dataset_id.fav_table gs://my_bucket/table_data/* <my schema>
不幸的是,我的一些数据有重复数据。有没有办法加载表但没有重复的行?
答案 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