カーキ色はヒンディー語らしい

技術記事は https://zenn.dev/notrogue

BigQueryのinsertIdの話

tl;dr

  • insertId付けると、Streaming Insertの重複の可能性が下がる
  • 重複排除はベストエフォートだよ
  • 付けないメリットもあるよ

insertIdとは

https://cloud.google.com/bigquery/streaming-data-into-bigquery?hl=ja#dataconsistency

BigQueryでStreaming Insertを行う時、各行にinsertIdと呼ばれるidを設定する事が可能です。 insertIdを設定することで、行が重複して挿入される事を ベストエフォートで回避します。

ただし、

  • 重複を確認する期間を過ぎた 時
    • (最短)一分
  • Googleのインフラで何かが起きた時
    • Google データセンターの接続が予期せず失われる稀なケースにおいては、自動重複排除を実行できない場合があります」
  • (クライアント側の実装の問題で)内容が同じ行に別のinsertIdが入っている時

場合は、行が重複して挿入される可能性があります。

Next generation BigQuery streaming

2020/5月に「Next generation BigQuery streaming」なる機能がGAになりました。 https://cloud.google.com/bigquery/docs/release-notes?hl=ja#May_20_2020

無駄にカッチョイイ名前ですが、実はinsertIdが設定されないStreaming Insertの事です。

わざわざ重複排除(の可能性)を止めて何が嬉しいかというと、

ようなメリットがあります。

なお、Next generation BigQuery streamingはどこでも使えるわけではなく、2020/5月時点では

  • us(マルチリージョン)
  • eu(マルチリージョン)
  • asia-northeast1(リージョン)

だけです。