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

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
    宮本

    View full-size slide

  2. 自己紹介
    宮本 航太(@miyamon44)
    CData Software Japan 合同会社
    →主にSaaSのAPIにSQLでアクセスできるコネクタや
    アプリケーションを開発・提供
    テクニカルサポートエンジニア
    →ELTツールの CData Syncの製品サポートを中心に、他社サー
    ビスとの検証、技術ブログ、コネクタ開発など色々やってる

    View full-size slide

  3. ある日のお問合せにて
    Salesforce のリード情報を BigQuery にレプリケーションしたんだけど、
    1回目は成功したんだが、 数分後すぐに2回目を実行すると失敗してしまう
    ジョブ構成などをヒアリングした結果、BigQuery のストリーミングAPI を使用してレ
    プリケーションしていることがわかった
    ETL/ELT Tool

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. 再現確認&原因
    【再現確認】
    洗替方式の内容*1を順番に Postman でリクエストして確認
    *1: テーブル削除 → テーブル作成 → ストリーミングインサート
    【原因】
    同名のテーブル再作成だと、テーブルが BigQuery に再作成してから数分
    間の間は物理的に反映されないのがわかった。 BigQuery のコンソール画
    面からテーブルサイズを見ても 0バイトのまま
    ※試した内容はQiitaに
    https://qiita.com/miyamotok/items/7036758013893b94aceb

    View full-size slide

  7. 他にないか調べた
    ストリーミングAPI 以外のデータ転送系APIの確認
    ● JSONじゃなくてSQLでリクエストできる Query API
    ● 転送内容をアップロード&アップロード用ジョブを作成して実行する Upload API

    View full-size slide

  8. Query API
    ● insertAll のように送信レコードを JSONで送るのではなく、SQLをBigQueryに送信する。
    POST /v2/projects/{projectId}/queries
    ● 同期型なので失敗した場合はBigQuery側には反映されない。
    ただし成功すると即座にテーブル自体も反映される。
     ➡ テーブル再作成を頻繁に行うケースでも対応できるので、こっちを案内

    View full-size slide

  9. Upload API
    ● upload API
    BigQueryの一時ストレージに対象データをアップロードしてロード用ジョブを作成する
    POST /upload/bigquery/v2/projects/projectId/jobs
    ● 大量レコードを反映したい場合などに向いている

    View full-size slide

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

    View full-size slide

  11. まとめ
    ● ELTサービス/ツールで利用APIを指定できるか?(転送方式を変更できるか)
    ● ユースケースにマッチする API(エンドポイント)はどれか?
    ● 最終的にはパフォーマンスやコストなども考慮
    ● 今後はWrite APIが良さそうかも
    ツールやサービス利用時はぶっちゃけあまり意識しない部分
    とは言え、オプションで BigQueryのAPIを選択できるかなどいくつかの観点で確認してみるのも◎
    ETL/ELT ツールの CData Sync では指定可能
    左記ブログで各種転送方式とパフォーマンスについて紹介してます
    Thank you!

    View full-size slide