Case3. 複数の canonical_id をマージした canonical_id を生成する#
canonical_ids:
内の各 canonical_id の設定で、merge_by_canonical_ids:
を使用することで、他の canonical_id をマージした canonical_id を生成することができる。
canonical_ids:
- name: brand_id_ax
merge_by_keys: [td_client_id, td_global_id]
source_tables: ['site_aaa','site_xxx']
merge_iterations: 5
- name: brand_id_yz
merge_by_keys: [td_client_id, td_global_id]
source_tables: ['site_yyy','site_zzz']
merge_iterations: 5
- name: unified_brand_id
merge_by_keys: []
merge_by_canonical_ids: [brand_id_ax, brand_id_yz]
merge_iterations: 5
この設定では、unified_brand_id を、brand_id_ax と brand_id_yz をマージして生成するような設定となっている。
unified_brand_id は、master_table の canonical_id として設定されているため、全てのソーステーブルをカバーしていないといけない。そのため、brand_id_ax と brand_id_yz を合わせた source_tables:
が、全てのテーブルをカバーしている必要があることに注意しよう。
unified_brand_id の merge_by_keys:
が空となっているのは、従来であればエラーとなるが、今回は merge_by_canonical_ids
が設定されていることによって動作することになる。
また、この設定の上で実行される Unification Algorithm は、まず brand_id_ax と brand_id_yz が並列に実行され、それが完了すると unified_brand_id の Unification Algorithm が実行される。
merge_by_canonical_ids: 設定下における Unification Algorithm#
merge_by_canonical_ids:
設定下では、Unification Algorithm の初期 graph が全く異なるものになる。
merge_by_keys:
に設定された key 以外に merge_by_canonical_ids:
で設定された canonical_id に設定されている方の merge_by_keys:
の key 、そして canonical_id 自身も key として加わることになる。
unified_brand_id の設定を見ながら説明していく。
- name: unified_brand_id
merge_by_keys: []
merge_by_canonical_ids: [brand_id_ax, brand_id_yz]
merge_iterations: 5
unified_brand_id_graph_unify_loop_0#
この設定の元では、graph_unify_loop_0 は以下のようになる。
merge_by_keys:
が空であるのにも関わらず、全てのデータソースの全ての key 、さらに canonical_id までが登場しているのがわかる。
graph_unify_loop_0 の作成ルール#
以下の graph を結合した graph をスタートとするため、多くの縫い合わせが完了している状態から始まることになる。
brand_id_ax の最終 graph
brand_id_yz の最終 graph
brand_id_ax と brand_id_yz のソーステーブルを併せたテーブル群から生成した初期 graph
merge_by_keys: の決定ルール#
また、適用される merge_by_keys:
の設定は以下のルールに基づく。
merge_by_canonical_ids:
に設定された canonical_id の canonical_id 自身が縫い合わせ key として登場する。その上で、
merge_by_keys:
は以下の順序で決定される:
unified_brand_id の
merge_by_keys:
の中の key が (この順番で) 優先順位が最も高く設定される。merge_by_canonical_ids:
に指定された brand_id_ax, brand_id_yz に登場する canonical_id の値が(列挙された順で)次の優先度となる。merge_by_canonical_ids:
に指定された brand_id_ax, brand_id_yz のmerge_by_keys:
の設定 ( unified_brand_id に使われている key を除いたもの) が最後の優先度となる。
今回の例であてはめると、
merge_by_keys: [canonical_id (brand_id_ax), canonical_id (brand_id_yz), td_client_id, td_global_id]
と設定されたことになる。graph_unify_loop_0 に対して、この優先度で Unification Algorithm が実行される。
unified_brand_id_graph#
key |
canonical_id |
---|---|
04zahkB6hA9G |
wONJPFlQsJyj |
この設定では、canonical_id (brand_id_ax) をベースにして canonical_id が生成されることになる。ただ、他の canonical_id をベースに canonical_id を生成するということは、元の canonical_id のベースとなった key の変更に伴い、こちらの canonical_id も変わってしまうことになり、少々複雑となる。これを嫌うならば、
- name: unified_brand_id
merge_by_keys: [td_global_id]
merge_by_canonical_ids: [brand_id_ax, brand_id_yz]
merge_iterations: 5
のように、unified_brand_id の merge_by_keys:
に key を設定しておくようにする。この時、 canonical_id の merge_by_keys:
の真の優先度は、
:merge_by_keys: [td_global_id, canonical_id (brand_id_ax), canonical_id (brand_id_yz), td_client_id]
となる。この設定における初期 graph は同じだが、収束した graph は td_global_id を leader にする graph となる。