Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
[ELTツール×BigQuery] どのAPI使ってる?それぞれのAPIについて調べてみた / elttool-bigquery-which-api
Miyamotok
March 08, 2022
Technology
0
290
[ELTツール×BigQuery] どのAPI使ってる?それぞれのAPIについて調べてみた / elttool-bigquery-which-api
Web API LT会 - vol.3 #webapilt
2022/03/08
Miyamotok
March 08, 2022
Tweet
Share
More Decks by Miyamotok
See All by Miyamotok
Amazon Appflow で Salesforce to Snowflake へのデータローディング(EL)をやってみた / appflow-salesforce-snowflake-dataloading
miyamotok
0
89
ノーコード×分析基盤で複数データソースからのデータ収集を楽しようの話 / multi-saas-data-extract
miyamotok
0
220
Amazon Appflow で SaaS データ取込みを自動化してQuickSightで可視化してみた / appflow-salesforce-quicksight
miyamotok
0
2.4k
AWS Glue を試してみたら、カスタムコネクタのありがたさを感じたこと / awsglue-custom-connector
miyamotok
0
910
最近使ったETL、ELTサービス(ツール)でデータ収集タスクについて考える / etl-elt-datacollect-task
miyamotok
1
1.7k
_CDataSync_SaaSデータのバックアップ_.pdf
miyamotok
0
800
Other Decks in Technology
See All in Technology
OVN-Kubernetes-Introduction-ja-2023-01-27.pdf
orimanabu
1
220
Optimizing your Swift code
kateinoigakukun
0
1.3k
re:Inventで発表があったIoT事例の紹介と考察
kizawa2020
0
150
AI Builderについて
miyakemito
0
750
プログラミング支援AI GitHub Copilot すごいの話
moyashi
0
280
CEXやDEXに依存しないブロックチェーン取引について考える
sbtechnight
0
310
OpenShift.Run2023_create-aro-with-terraform
ishiitaiki20fixer
1
150
plotlyで動くグラフを作る
kosshi
0
720
LINE iOSエンジニアの日々 / LINE iOS Engineer Days
line_developers
PRO
1
130
IoTを始めたきっかけの話と個人でできるIoTの今後 / 新年LT会「私の愛するIoT 2023」
you
0
140
20230121_BuriKaigi
oyakata2438
0
150
インフラ技術基礎勉強会 開催概要
toru_kubota
0
140
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
116
7.6k
Principles of Awesome APIs and How to Build Them.
keavy
117
15k
How GitHub Uses GitHub to Build GitHub
holman
465
280k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
Design by the Numbers
sachag
271
18k
The Invisible Side of Design
smashingmag
292
48k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
13
5.4k
Docker and Python
trallard
30
1.9k
Designing Experiences People Love
moore
130
22k
GraphQLの誤解/rethinking-graphql
sonatard
39
7.8k
Mobile First: as difficult as doing things right
swwweet
213
7.8k
Code Reviewing Like a Champion
maltzj
508
38k
Transcript
[ELTツール×BigQuery] どのAPI使ってる?それぞれの APIについて調べてみた Web API LT会 - vol.3 #webapilt 2022/03/08
CData Software Japan 宮本
自己紹介 宮本 航太(@miyamon44) CData Software Japan 合同会社 →主にSaaSのAPIにSQLでアクセスできるコネクタや アプリケーションを開発・提供 テクニカルサポートエンジニア
→ELTツールの CData Syncの製品サポートを中心に、他社サー ビスとの検証、技術ブログ、コネクタ開発など色々やってる
ある日のお問合せにて Salesforce のリード情報を BigQuery にレプリケーションしたんだけど、 1回目は成功したんだが、 数分後すぐに2回目を実行すると失敗してしまう ジョブ構成などをヒアリングした結果、BigQuery のストリーミングAPI を使用してレ
プリケーションしていることがわかった ETL/ELT Tool
ストリーミングAPI • ストリーミングAPIは、insertAll というエンドポイントにリクエストしてデータを送信。 レコード自体はBodyにJSON型でリクエスト POST /v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll • 特徴としてはデータ送信後にすぐ反映されるので、センサー情報などリアルタイムでモニタリングするようなケースには マッチ
BigQuery へのレプリケーション 【洗替方式】 毎回テーブル再作成で全件レプリケーション 【差分連携】 連携用テーブルを用意してそこに差分データだけ連携。 連携後は本番テーブルにレコードをマージ。例えば Dataform や dbt
などの変換 サービスを使ったり。
再現確認&原因 【再現確認】 洗替方式の内容*1を順番に Postman でリクエストして確認 *1: テーブル削除 → テーブル作成 →
ストリーミングインサート 【原因】 同名のテーブル再作成だと、テーブルが BigQuery に再作成してから数分 間の間は物理的に反映されないのがわかった。 BigQuery のコンソール画 面からテーブルサイズを見ても 0バイトのまま ※試した内容はQiitaに https://qiita.com/miyamotok/items/7036758013893b94aceb
他にないか調べた ストリーミングAPI 以外のデータ転送系APIの確認 • JSONじゃなくてSQLでリクエストできる Query API • 転送内容をアップロード&アップロード用ジョブを作成して実行する Upload
API
Query API • insertAll のように送信レコードを JSONで送るのではなく、SQLをBigQueryに送信する。 POST /v2/projects/{projectId}/queries • 同期型なので失敗した場合はBigQuery側には反映されない。
ただし成功すると即座にテーブル自体も反映される。 ➡ テーブル再作成を頻繁に行うケースでも対応できるので、こっちを案内
Upload API • upload API BigQueryの一時ストレージに対象データをアップロードしてロード用ジョブを作成する POST /upload/bigquery/v2/projects/projectId/jobs • 大量レコードを反映したい場合などに向いている
おまけ(Write API) ストリーミングAPIとバッチ処理を一つにまとめたAPIがつい最近リリース!! ストリーミングAPIがいつの間にか古くなってた。今後 はWriteAPIを推奨のようで。
まとめ • ELTサービス/ツールで利用APIを指定できるか?(転送方式を変更できるか) • ユースケースにマッチする API(エンドポイント)はどれか? • 最終的にはパフォーマンスやコストなども考慮 • 今後はWrite
APIが良さそうかも ツールやサービス利用時はぶっちゃけあまり意識しない部分 とは言え、オプションで BigQueryのAPIを選択できるかなどいくつかの観点で確認してみるのも◎ ETL/ELT ツールの CData Sync では指定可能 左記ブログで各種転送方式とパフォーマンスについて紹介してます Thank you!