Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[ELTツール×BigQuery] どのAPI使ってる?それぞれのAPIについて調べてみた / elttool-bigquery-which-api

[ELTツール×BigQuery] どのAPI使ってる?それぞれのAPIについて調べてみた / elttool-bigquery-which-api

Web API LT会 - vol.3 #webapilt
2022/03/08

F274f2fd3531a606f0a5766c9052b5d8?s=128

Miyamotok

March 08, 2022
Tweet

More Decks by Miyamotok

Other Decks in Technology

Transcript

  1. [ELTツール×BigQuery] どのAPI使ってる?それぞれの APIについて調べてみた Web API LT会 - vol.3 #webapilt 2022/03/08

    CData Software Japan 宮本
  2. 自己紹介 宮本 航太(@miyamon44) CData Software Japan 合同会社 →主にSaaSのAPIにSQLでアクセスできるコネクタや アプリケーションを開発・提供 テクニカルサポートエンジニア

    →ELTツールの CData Syncの製品サポートを中心に、他社サー ビスとの検証、技術ブログ、コネクタ開発など色々やってる
  3. ある日のお問合せにて Salesforce のリード情報を BigQuery にレプリケーションしたんだけど、 1回目は成功したんだが、 数分後すぐに2回目を実行すると失敗してしまう ジョブ構成などをヒアリングした結果、BigQuery のストリーミングAPI を使用してレ

    プリケーションしていることがわかった ETL/ELT Tool
  4. ストリーミングAPI • ストリーミングAPIは、insertAll というエンドポイントにリクエストしてデータを送信。 レコード自体はBodyにJSON型でリクエスト POST /v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll • 特徴としてはデータ送信後にすぐ反映されるので、センサー情報などリアルタイムでモニタリングするようなケースには マッチ

  5. BigQuery へのレプリケーション 【洗替方式】 毎回テーブル再作成で全件レプリケーション 【差分連携】 連携用テーブルを用意してそこに差分データだけ連携。 連携後は本番テーブルにレコードをマージ。例えば Dataform や dbt

    などの変換    サービスを使ったり。
  6. 再現確認&原因 【再現確認】 洗替方式の内容*1を順番に Postman でリクエストして確認 *1: テーブル削除 → テーブル作成 →

    ストリーミングインサート 【原因】 同名のテーブル再作成だと、テーブルが BigQuery に再作成してから数分 間の間は物理的に反映されないのがわかった。 BigQuery のコンソール画 面からテーブルサイズを見ても 0バイトのまま ※試した内容はQiitaに https://qiita.com/miyamotok/items/7036758013893b94aceb
  7. 他にないか調べた ストリーミングAPI 以外のデータ転送系APIの確認 • JSONじゃなくてSQLでリクエストできる Query API • 転送内容をアップロード&アップロード用ジョブを作成して実行する Upload

    API
  8. Query API • insertAll のように送信レコードを JSONで送るのではなく、SQLをBigQueryに送信する。 POST /v2/projects/{projectId}/queries • 同期型なので失敗した場合はBigQuery側には反映されない。

    ただし成功すると即座にテーブル自体も反映される。  ➡ テーブル再作成を頻繁に行うケースでも対応できるので、こっちを案内
  9. Upload API • upload API BigQueryの一時ストレージに対象データをアップロードしてロード用ジョブを作成する POST /upload/bigquery/v2/projects/projectId/jobs • 大量レコードを反映したい場合などに向いている

  10. おまけ(Write API) ストリーミングAPIとバッチ処理を一つにまとめたAPIがつい最近リリース!! ストリーミングAPIがいつの間にか古くなってた。今後 はWriteAPIを推奨のようで。

  11. まとめ • ELTサービス/ツールで利用APIを指定できるか?(転送方式を変更できるか) • ユースケースにマッチする API(エンドポイント)はどれか? • 最終的にはパフォーマンスやコストなども考慮 • 今後はWrite

    APIが良さそうかも ツールやサービス利用時はぶっちゃけあまり意識しない部分 とは言え、オプションで BigQueryのAPIを選択できるかなどいくつかの観点で確認してみるのも◎ ETL/ELT ツールの CData Sync では指定可能 左記ブログで各種転送方式とパフォーマンスについて紹介してます Thank you!