データ基盤

データ契約とは|列を消せば19個が止まるが、意味だけ変えると1個も止まらない

データ契約では何を約束するのかどの変更が下流を壊すのか止まらない変更は安全なのか

よく使われる列を消すと、下流40個のうち19個が止まりました。半分近くです。

同じ列の意味だけを変えると、止まるのは0個です。19個が誤った数字を出し続けます。

この記事の要点

  • 列を末尾に足すと0個
  • よく使う列を消すと19個
  • 型を変えても19個
  • 意味だけ変えると0個が止まる

列を消せば19個が止まるが、意味だけ変えると1個も止まらない

変更の種類によって、壊れる件数と気づけるかどうかが変わります。両方を見る必要があります。

データ契約は、渡す側と受け取る側で形と意味を約束する取り組みです。出典もこの狙いを述べています。

その言い方はスキーマの進化とは、既存の書き手と読み手との互換性を保ちながら、時間とともにスキーマを安全に変えていく実践であるというものです。

実際に何が壊れるのかを数えました。列20個・下流の処理40個で、1つの処理が2〜6列を使う場です。

列の使われ方は偏る

text
表の列 20個・下流の処理 40個。1つの処理は2〜6列を使う

列                使っている処理  全体に対する割合
最も使われる列                      19個             47.5%
2番目に使われる列                    18個             45.0%
真ん中の列                         4個             10.0%
最も使われない列                      0個              0.0%

最も使われる列は40個中19個から使われています。半分近くです。

いっぽう、誰にも使われていない列もあります。同じ1列でも、消したときの影響が違います

変更の種類ごとに数える

text
変更の種類            壊れる処理  気づけるか
列を末尾に足す                         0個          壊れない
使われない列を消す                       0個          壊れない
平均的な列を消す                        7個         すぐ止まる
最も使われる列を消す                     19個         すぐ止まる
最も使われる列の型を変える                  19個         すぐ止まる
最も使われる列の意味を変える                 19個         止まらない

列を末尾に足すのは0個です。誰も読んでいない列が増えるだけなので、影響しません。

出典もこの向きを前方互換なスキーマ変更の例は、新しい項目を足すことであるとしています。

出典Confluent Documentation「Schema Evolution and Compatibility」2026-08-18 確認
Schema evolution is the practice of safely changing schemas over time while maintaining compatibility with existing producers and consumers.
原文Confluent Documentation「Schema Evolution and Compatibility」 この内容の有効期限2027-02-18

止まらない変更のほうが、あとが重い

止まる変更はすぐ分かります。止まらない変更は、誤った数字が出続けたあとで発覚します。

データ契約で本当に怖いのは、止まらない変更です。表の最後の2行を比べます。

型を変えると19個が止まります。意味だけを変えても、壊れるのは同じ19個です。

違うのは右の列です。型の変更はすぐ止まるのに対し、意味の変更は止まりません

意味の変更とは

列名も型もそのままで、中身の定義だけを変えることです。金額を税込から税抜へ変える、といった形です。

受け取る側から見れば、数値が入った同じ列です。形が変わらないので、処理は動き続けます

出力される数字だけが静かに変わります。19個の処理が、誤った数字を出し続けます

いつ気づくか

気づくのは、誰かが数字を見て違和感を持ったときです。月次の報告や、外部からの指摘で発覚することもあります。

その時点で、いつから誤っていたのかを遡る作業が始まります。止まってくれたほうが安いという状況です。

壊れる件数が同じでも、気づけるかどうかで重さが変わる。

静かに広がるすぐ直せる影響が小さいすぐ直せるすぐ止まる止まらない気づけるか少ない多い壊れる処理の数列を末尾に足す使われない列を消す平均的な列を消すよく使う列の型を変えるよく使う列の意味を変える列20個・下流40個での実測。壊れる件数は0個から19個まで。
図1 ── 変更の種類を2つの軸で置く
出典Confluent Documentation「Schema Evolution and Compatibility」2026-08-18 確認
An example of a forward compatible schema modification is adding a new field.
原文Confluent Documentation「Schema Evolution and Compatibility」 この内容の有効期限2027-02-18

約束に、値の意味も書いておく

形だけの約束では、意味の変更を止められません。定義を書いて初めて、違反として扱えます。

データ契約に書く内容は、形だけでは足りません。前の節の意味の変更が、その理由です。

書いておくもの

  1. 列の名前と型。機械で確かめられる部分
  2. 値の意味。税込か税抜か、どの時点の値か
  3. 取りうる値。一覧、範囲、単位
  4. 更新のきまり。いつ、どれくらいの頻度で入るか

2番目があると、意味の変更が約束の違反として扱えます。書いていなければ、変えた側に落ち度がありません。

どちらから見た互換性か

互換性には向きがあります。出典は後方互換とは、新しいスキーマを使う読み手が、直前のスキーマで作られたデータを読めることを意味するとしています。

読み手が先に新しくなる場合と、書き手が先に新しくなる場合で安全な変更が違います。どちらが先かを決めておきます。

誰が使っているかを持つ

この計測の1つ目の表が、その材料です。列ごとに使っている処理の数が分かれば、消す前に影響が読めます。

0個の列なら、消しても壊れません。19個の列は、消す前に相談が要ります

受け取ったあとの検査そのものはデータ品質の記事で扱っています。形の検査では、意味の誤りに届きません。

形だけの約束では、意味の変更を違反にできない。

充足 2 / 4列ごとの利用者数を持っている消したときに壊れるのが0個か19個かは、これがないと分からない値の意味を文章で書いている書いていないと、意味の変更を違反として扱えない形の検査だけで守ろうとしている意味の変更は形が変わらないため、1個も止まらない列の追加も一律に禁じている末尾への追加は、この計測では0個しか壊さない列20個・下流の処理40個での実測にもとづく。
図2 ── 約束を作る前の点検項目
余談 この計測での注意

列の使われ方は式で作った偏りです。実際には識別子や日付のように、ほぼすべての処理が使う列があります。壊れる件数も「その列を使っているか」で数えた単純な形で、実際には使い方によって壊れ方が違います。ここで見せているのは、壊れる件数が同じでも、止まるかどうかで対応の重さが変わるという関係です。

出典Confluent Documentation「Schema Evolution and Compatibility」2026-08-18 確認
BACKWARD compatibility means that consumers using the new schema can read data produced with the last schema.
原文Confluent Documentation「Schema Evolution and Compatibility」 この内容の有効期限2027-02-18

よくある質問

どの変更が危ないですか
止まらない変更です。この計測では意味だけを変えると0個しか止まらず、19個が誤った数字を出し続けます。
列を足すのは安全ですか
使っていない列は誰も読まないので、この計測では0個が壊れました。末尾に足す分には影響しません。
列を消す前に何を見ますか
その列を使っている処理の数です。この計測では最も使われる列で19個、最も使われない列で0個でした。
データ契約には何を書きますか
列の名前と型に加えて、値の意味です。税込か税抜かといった定義がないと、意味の変更を止められません。

まとめ

  • 形と意味を約束する取り組み
  • 消す・型を変えるはすぐ止まる
  • 意味の変更は止まらない
  • 約束には意味も書く

今日から始められること

  1. 列ごとに、使っている処理の数を数える
  2. 多く使われている列を洗い出す
  3. その列の意味を文章で書き出す
  4. 変更のときに誰へ知らせるかを決める

実務で組んだデータ契約のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る