insertId等效于bq命令行

时间:2016-05-24 14:11:13

标签: google-bigquery google-cloud-platform

我做了一些测试,以避免在插入过程中出现双重问题。我注意到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
我错过了什么吗?

1 个答案:

答案 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

有关重复删除查询的说明:

  • 重复删除查询的更安全策略是定位新表。或者,您可以使用写配置WRITE_TRUNCATE来定位源表。
  • 重复删除查询将值为1的row_number列添加到表模式的末尾。您可以按特定列名称进行选择以省略此列。
  • 要查看删除了重复项的实时数据,您还可以使用重复删除查询在表上创建视图。请注意,视图的查询成本将根据视图中选择的列进行计算,这可能会导致扫描大字节的大字节。