troccoとBigQueryで冪等性を考慮し日次バッチ処理をするZenntsuitachi🐊troccoとBigQueryで冪等性を考慮し日次バッチ処理をする2022/02/27に公開・約1,700字ツイートBigQuery#ETL#troccotech概要BigQueryを使用しているAPIから前日に更新されたデータを取得したいtroccoで日次で転送を行うがデータが入らないケースがあるリトライした際に重複データが出るとまずいので、冪等性を考慮した設計にしたいパーティション分割テーブルとデコレータを付与することで実現したBigQueryのパーティション分割テーブルとはパーティションと呼ばれるセグメントに分割された特殊なテーブルで、パーティショニングされた値に対してフィルタを使用すると一致する部分のみスキャンすることができる。コスト削減、クエリのパフォーマンスアップにつながるので良い。https://cloud.google.com/bigquery/docs/partitioned-tables?hl=jaパーティションテーブルを扱う方法は2つ。指定パーティションのみreplaceしたい場合はパーティションデコレータを用いる必要がある。データ重複は避けたいが、全データを読み込むのが難しいケースに重宝しそう。参考にさせていただいたパパエンジニアさんのブログパーティションデコレータとはクエリ結果を特定のパーティションに書き込める。書き込まれるデータの全ての行はパーティションの日付内に収まる必要があるので注意。consoleのAPIを叩く。取得期間を変数機能で設定。BigQueryの転送先テーブルも先程と同様の日付を変数で設定。テーブル名が「test$yyyymmdd」となるように調整。冪等性を考慮するため、転送モードは全件洗い変え(REPLACE)にする。(同じ日付のデータを上書きして重複を避ける)おわりにデータが入ってこなかった場合は後日リトライする部分まで自動化したい。気になる点があればご指摘くださいm(__)m既に公式のヘルプ記事があったことに途中で気がついたorzhttps://docs.trocco.io/s/article/転送先BigQueryにて-特定のパーティションテーブルのデータを置換する方法?language=jaツイートtsuitachiアナリスト兼データエンジニアをやっています。バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。約1,700字tsuitachiアナリスト兼データエンジニアをやっています。概要BigQueryのパーティション分割テーブルとはパーティションデコレータとはパーティションデコレータを用いてtroccoの転送設定を行うおわりにZennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。