よく使われる列を消すと、下流40個のうち19個が止まりました。半分近くです。
同じ列の意味だけを変えると、止まるのは0個です。19個が誤った数字を出し続けます。
変更の種類によって、壊れる件数と気づけるかどうかが変わります。両方を見る必要があります。
データ契約は、渡す側と受け取る側で形と意味を約束する取り組みです。出典もこの狙いを述べています。
その言い方はスキーマの進化とは、既存の書き手と読み手との互換性を保ちながら、時間とともにスキーマを安全に変えていく実践であるというものです。
実際に何が壊れるのかを数えました。列20個・下流の処理40個で、1つの処理が2〜6列を使う場です。
表の列 20個・下流の処理 40個。1つの処理は2〜6列を使う 列 使っている処理 全体に対する割合 最も使われる列 19個 47.5% 2番目に使われる列 18個 45.0% 真ん中の列 4個 10.0% 最も使われない列 0個 0.0%
最も使われる列は40個中19個から使われています。半分近くです。
いっぽう、誰にも使われていない列もあります。同じ1列でも、消したときの影響が違います。
変更の種類 壊れる処理 気づけるか 列を末尾に足す 0個 壊れない 使われない列を消す 0個 壊れない 平均的な列を消す 7個 すぐ止まる 最も使われる列を消す 19個 すぐ止まる 最も使われる列の型を変える 19個 すぐ止まる 最も使われる列の意味を変える 19個 止まらない
列を末尾に足すのは0個です。誰も読んでいない列が増えるだけなので、影響しません。
出典もこの向きを前方互換なスキーマ変更の例は、新しい項目を足すことであるとしています。
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個の処理が、誤った数字を出し続けます。
気づくのは、誰かが数字を見て違和感を持ったときです。月次の報告や、外部からの指摘で発覚することもあります。
その時点で、いつから誤っていたのかを遡る作業が始まります。止まってくれたほうが安いという状況です。
壊れる件数が同じでも、気づけるかどうかで重さが変わる。
An example of a forward compatible schema modification is adding a new field.原文Confluent Documentation「Schema Evolution and Compatibility」 この内容の有効期限2027-02-18
形だけの約束では、意味の変更を止められません。定義を書いて初めて、違反として扱えます。
データ契約に書く内容は、形だけでは足りません。前の節の意味の変更が、その理由です。
2番目があると、意味の変更が約束の違反として扱えます。書いていなければ、変えた側に落ち度がありません。
互換性には向きがあります。出典は後方互換とは、新しいスキーマを使う読み手が、直前のスキーマで作られたデータを読めることを意味するとしています。
読み手が先に新しくなる場合と、書き手が先に新しくなる場合で安全な変更が違います。どちらが先かを決めておきます。
この計測の1つ目の表が、その材料です。列ごとに使っている処理の数が分かれば、消す前に影響が読めます。
0個の列なら、消しても壊れません。19個の列は、消す前に相談が要ります。
受け取ったあとの検査そのものはデータ品質の記事で扱っています。形の検査では、意味の誤りに届きません。
形だけの約束では、意味の変更を違反にできない。
列の使われ方は式で作った偏りです。実際には識別子や日付のように、ほぼすべての処理が使う列があります。壊れる件数も「その列を使っているか」で数えた単純な形で、実際には使い方によって壊れ方が違います。ここで見せているのは、壊れる件数が同じでも、止まるかどうかで対応の重さが変わるという関係です。
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
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る