<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ETL on Think and Write</title><link>https://kenjiusui.github.io/blog/tags/etl/</link><description>Recent content in ETL on Think and Write</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 10 May 2026 20:33:11 +0900</lastBuildDate><atom:link href="https://kenjiusui.github.io/blog/tags/etl/index.xml" rel="self" type="application/rss+xml"/><item><title>データ分析基盤を開発するときデータを取得する方法をどうやって考えればいいのか？</title><link>https://kenjiusui.github.io/blog/posts/biz/012_%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E5%9F%BA%E7%9B%A4%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E8%80%83%E3%81%88%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%AE%E3%81%8B/</link><pubDate>Sun, 10 May 2026 20:33:11 +0900</pubDate><guid>https://kenjiusui.github.io/blog/posts/biz/012_%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E5%9F%BA%E7%9B%A4%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E8%80%83%E3%81%88%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%AE%E3%81%8B/</guid><description>&lt;p&gt;データ分析基盤を構築するとき避けて通れないのが「どうやってデータを取得するか」という問題です。&lt;/p&gt;
&lt;p&gt;SaaSのETLツールを使うのか、APIを自前で叩くのか、手動でCSVを取り込むのか。&lt;br&gt;
データを取得する手法は選択肢が多く状況に応じて最適な手法は変化します。&lt;br&gt;
また、技術的な問題だけではなく分析する側であるビジネス上の要求も考える必要があります。&lt;/p&gt;
&lt;p&gt;本記事では技術選定の判断基準を整理し、筆者の経験をもとに実際によくある検討のパターンを解説します。&lt;/p&gt;
&lt;h2 id="データの鮮度更新頻度"&gt;データの鮮度・更新頻度&lt;/h2&gt;
&lt;p&gt;更新頻度は技術選定に最も直接的な影響を与える要素です。&lt;/p&gt;
&lt;p&gt;一般にデータを更新する頻度が上がるほど自動化の設計は複雑になります。&lt;br&gt;
日次であれば夜間バッチで全件更新というシンプルな仕組みで済みますが、これが数時間おきとなるとAPIのレートリミットを意識した設計が必要になるかもしれません。&lt;br&gt;
更にリアルタイムになれば差分検知やリトライの仕組みまで求められます。&lt;/p&gt;
&lt;p&gt;つまり更新頻度は「どの程度の仕組みを作る必要があるか」を決める起点であり実装・運用コストに直結します。&lt;br&gt;
逆にいえば「どれくらいの頻度でデータを更新する必要があるか」を最初に固めることで選択の幅が大きく絞り込むことができます。&lt;/p&gt;
&lt;h3 id="低頻度"&gt;低頻度&lt;/h3&gt;
&lt;p&gt;低頻度とは年に数回くらいの想定です。&lt;br&gt;
こういったデータの場合は手動で全件を更新するというケースが多くなります。&lt;br&gt;
データソースと分析上の要求として増分・差分をわざわざ検知する必要がないため全件更新で問題がないこと、そして頻度が低いため自動化のメリットを享受しにくいこと多いためです。&lt;br&gt;
更新頻度が低いデータの場合はそもそもデータの形式や用途が安定しないこともあり処理の内容を毎回検討する必要が多いことも自動化の優先度が下がる要因の1つです。&lt;/p&gt;
&lt;p&gt;自動化を選ばないケースでいうと、たとえば特定のプロジェクトや顧客で単発で発生するようなケースがあります。&lt;br&gt;
プロジェクトで単発的にデータが発生したり、顧客ごとにデータの形式にばらつきがあったりという状況です。&lt;br&gt;
このような不定期でデータの形式も完全に固まっていない場合は自動化のコストが高くなりがちです。&lt;br&gt;
担当者がその都度手動で取り込む運用でも十分でしょう。&lt;/p&gt;
&lt;p&gt;逆に頻度が低いとはいえデータの形式が固まっており処理が複雑という場合は自動化のメリットが上回ります。&lt;br&gt;
エクスポートしたデータをエクセルなどで細々と整理してからアップロードするようなプロセスが必要だとしたら手間もかかりますしミスも起きやすいので自動化が望ましいでしょう。&lt;br&gt;
たとえば、年に数回しか更新されないマスタデータがありながらインポートにひと手間必要という場合はこのケースに該当します。&lt;br&gt;
完全に自動化する必要もないので無理にワークフローに載せずにスクリプトとして保存しておくなどの対処もありえます。&lt;/p&gt;
&lt;h3 id="月次週次"&gt;月次・週次&lt;/h3&gt;
&lt;p&gt;月次・週次で更新する場合は全件更新するケースが多くなります。&lt;br&gt;
データソースの特性として月次・週次で更新するデータは何らかの作業がひととおり終わったものを保存するというケースが多く、そのため増分・差分を検知して保存するというよりも全件を保存したいことが多いからです。&lt;br&gt;
たとえば締め作業が終わって確定した会計データや、週次で棚卸し作業をしている在庫情報などが挙げられます。&lt;/p&gt;
&lt;p&gt;月次・週次くらいの頻度で恒常的に発生するとなると自動化による作業コストが削減できるメリットが大きくなるため多くの場合で自動化を検討します。&lt;br&gt;
1つ2つくらいのデータソースであればなんとかなりますがデータ分析基盤には多くのデータソースを結合していくことになりますので自動化することを前提に設計するべきでしょう。&lt;/p&gt;
&lt;p&gt;また、作業ミスによるリスクも考慮に入れるべきです。&lt;br&gt;
それなりの頻度で作業することになりますから必然的にミスも発生します。&lt;br&gt;
作業ミスはそのままデータ品質の問題に、そして誤った意思決定へと繋がります。&lt;br&gt;
より確かな意思決定という観点からも週次・月次くらいの更新頻度が定常的に発生するようであれば自動化が前提という意識でいるのがよいでしょう。&lt;/p&gt;
&lt;h3 id="日次更新"&gt;日次更新&lt;/h3&gt;
&lt;p&gt;最も一般的な更新頻度です。&lt;br&gt;
毎晩にバッチ処理を走らせ朝出社したときには最新のデータが見られるようになっている、というサイクルは多くのビジネスの意思決定に十分なサイクルです。&lt;br&gt;
日次の更新ではデータ量がよほど大きくない限り全件を取得してそのまま更新するシンプルな設計をベースに検討します。&lt;/p&gt;
&lt;p&gt;この頻度になると自動化は原則です。&lt;br&gt;
毎日の作業となると手動では作業の負担が大きくなります。&lt;br&gt;
あわせて作業頻度が増えることでミスも起きやすくなるため担当者の業務を圧迫します。&lt;br&gt;
スケジュール実行で毎日自動的に動くように設計しておくことで安定した運用が実現できます。&lt;/p&gt;
&lt;p&gt;基本は全件更新ですがデータ量が多い場合は全件更新が難しくなるため増分・差分更新を検討する必要も出てきます。&lt;br&gt;
ただし増分・差分更新は実装が複雑になるため、まずは全件更新でシンプルに作り必要に応じて改善するアプローチを取るほうが無難です。&lt;br&gt;
現代ではデータの保存・処理コストは非常に安いので実装が複雑になることのデメリットの回避を優先したほうがよいケースは多いでしょう。&lt;/p&gt;
&lt;h3 id="数時間に一度"&gt;数時間に一度&lt;/h3&gt;
&lt;p&gt;日次よりも高い頻度で更新したいがリアルタイムだと工数が高すぎるという場合にとる選択肢です。&lt;br&gt;
ログデータのような量が多く変化を素早く検知したいようなケースです。&lt;br&gt;
もしくは日次だとデータ量が多くなるため分割したいという場合です。&lt;br&gt;
数時間おきに更新するときは同時に増分・差分更新が要件となることが増えます。&lt;br&gt;
差分を検知して変更があった分だけを取得する設計が取れるか検討しましょう。&lt;/p&gt;
&lt;p&gt;増分・差分更新が求められがちな理由はいくつかあります。&lt;br&gt;
数時間ごとに更新したいデータはログデータのようにデータ量が多く変更よりも追記が多いデータであるため増分・差分更新が要件になりがちです。&lt;br&gt;
そうでなくとも数時間ごとに実行すると日次の数倍の処理量になるためさすがにコストが無視できない状況になってきます。&lt;br&gt;
合わせてAPIの実行頻度が増えるため毎回全件更新するとAPIのレートリミットに引っかかるリスクも高まります。&lt;br&gt;
このような理由の組み合わせから増分・差分更新になりやすくなります。&lt;br&gt;
もちろん全件更新で要件として十分なのであればそのほうが望ましいことは言うまでもありません。&lt;/p&gt;
&lt;p&gt;注意点として、増分・差分更新の実装には「どのレコードがいつ変更されたか」を追うことが必須です。&lt;br&gt;
そのためのタイムスタンプや連番IDがデータソース側に存在することが前提になります。&lt;br&gt;
これが整備されていない場合は差分の検知自体が難しくなるためデータソースの特性を事前に確認することが重要です。&lt;/p&gt;
&lt;h3 id="即時数分のリアルタイム連携"&gt;即時〜数分のリアルタイム連携&lt;/h3&gt;
&lt;p&gt;リアルタイム連携はデータソースの変更が即時もしくは数分程度の遅延で反映されるような設計です。&lt;br&gt;
ユーザーの行動ログデータや広告データなどデータ量が非常に多く、同時に変化を検知したいという場面で求められることが多いです。&lt;br&gt;
リアルタイム連携は更新頻度としては理想ではありますが一方で他の更新頻度に比べて実装・運用コストが高くなります。&lt;/p&gt;
&lt;p&gt;リアルタイム連携には大きく2つのアプローチがあります。&lt;br&gt;
一つはデータソース側で変更が発生した時点でイベントとして通知を受け取るイベント駆動型で、もう一つは数分おきに差分だけを取得するミニバッチ形式です。&lt;br&gt;
どちらも「変更をほぼリアルタイムで検知して取り込む」という点では共通しており日次のバッチ処理とは設計の考え方が大きく異なります。&lt;br&gt;
どちらのアプローチが現実的かはデータソースの特性やAPIなどのインターフェイスによって変わります。&lt;/p&gt;
&lt;p&gt;リアルタイムにデータを連携しようとすると要求される技術的な難易度が一気に上がります。&lt;br&gt;
単純なAPI連携で全件更新するバッチ処理に比べると差分の検知に加えてリトライ設計や運用の監視など考えるべき要素が増えるためです。&lt;br&gt;
障害発生時も全件更新であれば再度実行すれば簡単に復旧することが可能ですがリアルタイム連携の場合はどこまでデータが取れているのか確認する必要があるなど復旧のコストと難易度が高くなります。&lt;br&gt;
一方で、リアルタイム連携が求められやすいデータソースは公式や外部SaaSにリアルタイム連携のコネクタが用意されていることもあるのでその場合は比較的実現しやすくなります。&lt;/p&gt;</description></item></channel></rss>