我做了一些测试,以避免在插入过程中出现双重问题。我注意到rows [] .insertId可以允许避免加倍,但似乎bq命令行没有这样的参数。我试过--undefok
但没有效果。
bq --apilog= --show_build_data insert --insert_id=201603210850 --template_suffix=_20160520 --dataset_id=mydataset --undefok=insert_id MYTEMPLATE.table myjson.json
我错过了什么吗?
答案 0 :(得分:1)
AFAIK insert_id
仅在流式插入基础上考虑,而不是加载作业。
并且它不是一个开关,它是被摄取的行的值。
https://cloud.google.com/bigquery/streaming-data-into-bigquery#before_you_begin
手动删除重复项
您可以使用以下手动过程来确保在完成流式传输后不存在重复的行。
1)将insertID作为列添加到表模式中,并在每行的数据中包含insertID值。 2)流式传输停止后,执行以下查询以检查重复项:
SELECT max(count) FROM(
SELECT <id_column>, count(*) as count
FROM <table>
GROUP BY id_column)
如果结果大于1,则存在重复项。
3)要删除重复项,请执行以下查询。您应指定目标表,允许大结果,并禁用结果展平。
SELECT *
FROM (
SELECT
*,
ROW_NUMBER()
OVER (PARTITION BY <id_column>)
row_number,
FROM <table>
)
WHERE row_number = 1
有关重复删除查询的说明: