· HARUBOUYA · ai · 16 min read
読み込めないほど大きいデータを、AIでどう扱うか
数千万行のテーブルはAIに貼り付けられません。渡すのはデータではなく、構造か集計結果です。4つの型と、どれを選ぶかの判断基準を書きます。

AIにデータ分析をさせようとして、最初にぶつかるのがこれです。元のデータが大きすぎて渡せません。
数千万行のログ、数百MBのCSV、1年分の受注明細などです。貼り付けようとしても入らないし、分割して渡すと前半の内容を踏まえた判断ができません。
ここでの考え方は1つです。AIに渡すのはデータそのものではありません。渡すのは、データの構造か、集計した結果です。順に書きます。
問題:全部読ませようとしている
大きなデータをそのまま渡そうとすると、次のどれかで詰まります。
| やり方 | 起きること |
|---|---|
| 全部貼り付けます | 入りきりません。途中で切れます |
| 分割して順に渡します | 前半を踏まえた比較ができません |
| サンプルだけ渡します | 全体の傾向が出ません。外れ値を見落とします |
| 要約してから渡します | 要約の時点で必要な情報が落ちています |
共通するのは、AIを「読む人」として使おうとしていることです。数千万行を読ませる必要はありません。読むのではなく、数える処理を書かせればよいです。
4つの型
| 型 | 渡すもの | 向く場面 |
|---|---|---|
| 1. 集計してから渡します | 集計結果(数十行) | 数字の解釈、レポートの文章化 |
| 2. 構造だけ渡します | 列名・型・サンプル数行 | 集計そのものをAIに書かせます |
| 3. 分けて渡して統合します | 1件ずつの要約 | 契約書・議事録など、独立した文書の束 |
| 4. 実行環境ごと渡します | ファイルの置き場 | 手元の環境でAIに処理を書かせて動かせる場合 |
だいたいの場面は1か2で足ります。
型1:集計してから渡す
最も確実です。集計はデータベース側で終わらせ、AIには結果だけを渡します。
BigQuery で集計(数千万行 → 30行)
↓
その30行をAIに貼り付ける
↓
「この結果から、先月と比べて変化が大きい項目を3つ挙げて」渡すのは、次のような形です。
| 月 | 注文件数 | 売上 | 平均単価 |
|---|---|---|---|
| 2026-06 | 12,430 | 148,300,000 | 11,930 |
| 2026-07 | 13,890 | 159,100,000 | 11,454 |
| 2026-08 | 11,205 | 141,700,000 | 12,646 |
この形なら数十行に収まります。AIが得意なのは、この数字から何が言えるかを言葉にすることです。数えること自体ではありません。
指示の書き方
上の表について、次の条件でまとめてください。
- 表の数値だけを使う。表にない数値を出さない
- 変化が大きい項目を3つ、変化率の大きい順に挙げる
- 原因は推測しない。数値の事実だけを書く
- 最後に、追加で確認すべき切り口を2つ挙げる「表にない数値を出さない」を必ず入れます。これがないと、それらしい補足の数字が付いてきます。
型2:構造だけ渡して、SQLを書かせる
データは渡さず、どんな形のデータがあるかだけを渡します。
渡すものは次のとおりです。
テーブル:orders(注文明細)
列:
order_id STRING 注文番号
ordered_at TIMESTAMP 注文日時(UTC)
member_id STRING 会員ID。未ログインは空
item_code STRING 品番
quantity INT64 数量
unit_price NUMERIC 単価(税抜)
channel STRING web / app / store
件数:約4,800万行(2024年1月〜)そのうえで、やりたいことを日本語で書きます。
上のテーブルから、月ごとの新規会員の初回購入件数を出すSQLを書いてください。
新規会員は「その会員IDの最初の注文」と定義します。
日時はUTCなので、日本時間に直して月で集計してください。出てきたSQLは、実行する前に必ず自分で読みます。見るのは次の4点です。
| 確認する箇所 | よくある誤り |
|---|---|
| 期間の条件 | 絞り込みが無く、全期間をスキャンします |
| 時差 | UTCのまま集計され、月初と月末がずれます |
| 重複 | 明細と注文を取り違えて件数が膨らみます |
| 除外条件 | キャンセル分が含まれたまま |
BigQueryなら、実行ボタンの上に処理されるデータ量が表示されます。桁が想定と違えば、絞り込みが抜けています。
なぜこの型が効くか
実データを1行も渡していないため、件数がいくら増えても関係ありません。4,800万行でも48億行でも、渡す情報は同じです。
型3:分けて渡して統合する
契約書100件、議事録50本のように、1件ずつが独立している文書の束で使います。
1件ずつ渡して、決まった形で要約させる
↓
要約だけを集めて1つの表にする
↓
その表をAIに渡して、横断で比較させる要点は、要約の形を先に決めておくことです。バラバラの形で要約すると、統合の段階で比較できません。
次の形式で要約してください。この項目以外は書かないこと。
- 相手先:
- 期間:(開始日〜終了日)
- 金額:(税抜、数値のみ)
- 自動更新:(あり/なし/記載なし)
- 解約の通知期限:(日数。記載がなければ「記載なし」)「記載なし」を選べるようにします。これがないと、書かれていない項目を埋めようとして、もっともらしい値が入ります。
型4:実行環境ごと渡す
手元の環境でAIにコードを書かせて動かせる場合は、ファイルの置き場所を伝えるだけでよいです。
data/ フォルダに12か月分のCSVがあります(各200MB前後)。
全部を読み込まず、1ファイルずつ処理して、
月ごとの合計を1つの表にまとめてください。この型の利点は、大きいファイルがAIの手元を通らないことです。処理するコードだけが書かれ、実行結果の数十行が返ってきます。
注意点は、途中経過をファイルに残させることです。1ファイル処理するたびに結果を書き出させておくと、途中で止まってもやり直しが1ファイル分で済みます。
どの型を選ぶか
| 状況 | 選ぶ型 |
|---|---|
| 集計はもうできています。解釈と文章化をしたいです | 型1 |
| 何をどう集計するかを決めたいです | 型2 |
| データベースに入っていない大きなファイルがあります | 型4 |
| 文書の束を横断で比べたいです | 型3 |
| 個人情報を含みます | 型2(データを渡さないため) |
個人情報を含むデータでは型2を使います。列名と件数だけを渡し、実データは自社の環境から出しません。
数字の扱い
どの型でも共通する原則が1つあります。
数えるのは機械、説明するのが人とAI。
| やらせてよいこと | やらせてはいけないこと |
|---|---|
| 集計結果を文章にします | 数値を暗算させます |
| 変化の大きい項目を選びます | 合計や平均を計算させます |
| SQLや処理を書きます | 書いたSQLを実行せずに結果を予想させます |
| 確認すべき切り口を挙げます | 原因を断定させます |
合計を計算させません。表を渡して「合計は」と聞くと、それらしい数字が返るが、検算すると合わないことがあります。合計は集計側で出しておきます。
やること
手順1. 渡すものを1度書き出す
指示を書く前に、次の3行を埋めます。
渡すもの:(集計結果/列の定義/要約の束/ファイルの置き場)
渡さないもの:(実データ、個人情報、社名)
知りたいこと:(1つだけ)「知りたいこと」を1つに絞ります。複数を一度に聞くと、どれも浅くなります。
手順2. 件数と期間を必ず添える
| 添えるもの | 理由 |
|---|---|
| 全体の件数 | サンプルなのか全部なのかが分かります |
| 期間 | 季節性を踏まえた解釈ができます |
| 除外した条件 | 数値の前提が揃います |
手順3. 出てきた数値を1つだけ検算する
全部を検算しません。最も大きい数値を1つだけ、元の集計と突き合わせます。ここが合っていれば、集計結果をそのまま使っています。ずれていれば、どこかで作られた数字が混ざっています。
手順4. 同じ手順を繰り返すなら、スキルに登録する
毎月同じ形式で同じ分析をするなら、手順書として登録しておくと、次から指示を書かなくてよくなります。
登録する内容は次の3つです。
| 内容 | 例 |
|---|---|
| 渡す形式 | 集計結果の表の列構成 |
| 出力の型 | 見出し、数値、変化、次の確認事項 |
| 禁止事項 | 表にない数値を出さない、原因を断定しません |
失敗例
| 失敗 | 何が起きるか | 代わりにやること |
|---|---|---|
| 元データを全部渡そうとします | 入りません。分割しても比較ができません | 集計結果か構造だけを渡します |
| サンプル1万行で傾向を語ります | 外れ値や季節性を見落とします | 全件を集計してから渡します |
| 合計や平均を計算させます | 検算すると合いません | 集計側で出してから渡します |
| 「表にない数値を出さない」を書きません | もっともらしい補足の数字が付きます | 指示に必ず入れます |
| 出てきたSQLをそのまま実行します | 期間の絞り込みが抜け、全期間をスキャンします | 実行前に期間・時差・重複・除外を確認します |
| 要約の形式を決めずに束を処理します | 形がばらつき、統合できません | 項目を先に決め、「記載なし」を選べるようにします |
| 個人情報を含むデータを渡します | 出してはいけない情報が外に出ます | 列の定義だけを渡します |
| 原因まで書かせます | 推測が事実として資料に載ります | 数値の事実だけを書かせ、原因は人が考えます |
まとめ
- 大きいデータは読ませるのではなく、数える処理を書かせます
- 渡すのはデータではなく、集計結果か、データの構造
- 型は4つです。集計してから渡す/構造だけ渡す/分けて統合する/実行環境ごと渡します
- 構造だけ渡す型なら、件数がいくら増えても渡す情報は変わりません
- 個人情報を含む場合は、列の定義だけを渡して実データを出しません
- 指示には「表にない数値を出さない」を必ず入れます
- 合計や平均は計算させません。集計側で出してから渡します
- 出てきた数値は、最も大きいものを1つだけ検算します
最初にやることは、渡すもの・渡さないもの・知りたいことの3行を書くことです。ここが決まれば、どの型を使うかは自動的に決まります。
参考になったら、いいねを押してください。





