[{"data":1,"prerenderedAt":2360},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\u002Fdata\u002Fidentity-resolution-odnoidentifikator":13},{"i18nKey":4,"paths":5},"data-003-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fdata\u002Fidentity-resolution-hash-matching-probabilistic","\u002Fen\u002Fdata\u002Fidentity-resolution-unifying-customer-signals","\u002Fes\u002Fdata\u002Fresolucion-de-identidad","\u002Ffr\u002Fdata\u002Fresolution-identite-6-signaux-identite-client-unique","\u002Fit\u002Fdata\u002Frisoluzione-identita-sei-segnali-unica-identita-cliente","\u002Fru\u002Fdata\u002Fidentity-resolution-odnoidentifikator","\u002Ftr\u002Fdata\u002Fidentity-resolution-6-sinyalden-tek-musteri-kimligine",{"_path":11,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":2354,"_id":2355,"_source":2356,"_file":2357,"_stem":2358,"_extension":2359},"data",false,"","Identity Resolution: От 6 Сигналов к Единому Идентификатору Клиента","Hash matching, probabilistic linking и household identity для объединения разрозненных сигналов клиента в единый идентификатор. Инженерия BigQuery + CDP на практике.","2026-06-16",[21,22,23,24,25],"identity-resolution","customer-data-platform","hash-matching","probabilistic-linking","first-party-data",8,"Roibase",{"type":29,"children":30,"toc":2344},"root",[31,39,46,76,536,587,592,599,604,610,635,758,770,1657,1669,1674,1680,1685,1695,1705,1991,2011,2016,2022,2034,2198,2203,2215,2221,2236,2241,2286,2291,2297,2302,2315,2329,2333,2338],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Средний срок жизни cookies сократился с 28 дней до 7. Пользователь начинает в мобильном приложении, платит на десктопном веб-сайте, возвращается из email-кампании — каждая точка контакта генерирует другой идентификатор. 40% маркетинговых данных остаётся orphan-событиями: нет user ID, нет session ID, нет attribution. Identity resolution — это операция объединения этих фрагментов инженерной дисциплиной. Не предположения, а hash matching; не умозаключения, а probabilistic graph; не допущения, а household clustering.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"deterministic-matching-объединение-на-основе-хешей",[44],{"type":37,"value":45},"Deterministic Matching: Объединение на Основе Хешей",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,57,59,66,68,74],{"type":37,"value":50},"Deterministic match работает, когда вы ",{"type":32,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":37,"value":56},"достоверно знаете",{"type":37,"value":58},", что два датапойнта делят одинаковый идентификатор. Email SHA-256 hash, phone number hash, CRM ID. Если в таблице событий BigQuery есть ",{"type":32,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":37,"value":65},"user_id",{"type":37,"value":67},", а в веб-аналитике ",{"type":32,"tag":60,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"ga_client_id",{"type":37,"value":75},", вы не можете напрямую их соединить — сначала нужно найти событие, где оба писаны, и построить таблицу сопоставления.",{"type":32,"tag":77,"props":78,"children":82},"pre",{"className":79,"code":80,"language":81,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","-- Пример детерминистского сшивания идентичности\nCREATE OR REPLACE TABLE `project.dataset.identity_graph` AS\nWITH email_hashes AS (\n  SELECT DISTINCT\n    user_pseudo_id,\n    TO_HEX(SHA256(LOWER(TRIM(user_properties.email.value)))) AS email_hash\n  FROM `project.dataset.events_*`\n  WHERE user_properties.email.value IS NOT NULL\n),\ncrm_map AS (\n  SELECT\n    crm_id,\n    TO_HEX(SHA256(LOWER(TRIM(email)))) AS email_hash\n  FROM `project.crm.customers`\n)\nSELECT\n  e.user_pseudo_id,\n  c.crm_id,\n  e.email_hash\nFROM email_hashes e\nINNER JOIN crm_map c\n  ON e.email_hash = c.email_hash;\n","sql",[83],{"type":32,"tag":60,"props":84,"children":85},{"__ignoreMap":16},[86,98,134,159,168,177,244,258,292,301,318,327,336,369,382,391,400,423,445,462,476,490],{"type":32,"tag":87,"props":88,"children":91},"span",{"class":89,"line":90},"line",1,[92],{"type":32,"tag":87,"props":93,"children":95},{"style":94},"--shiki-default:#6A737D",[96],{"type":37,"value":97},"-- Пример детерминистского сшивания идентичности\n",{"type":32,"tag":87,"props":99,"children":101},{"class":89,"line":100},2,[102,108,113,118,123,129],{"type":32,"tag":87,"props":103,"children":105},{"style":104},"--shiki-default:#F97583",[106],{"type":37,"value":107},"CREATE",{"type":32,"tag":87,"props":109,"children":110},{"style":104},[111],{"type":37,"value":112}," OR",{"type":32,"tag":87,"props":114,"children":115},{"style":104},[116],{"type":37,"value":117}," REPLACE",{"type":32,"tag":87,"props":119,"children":120},{"style":104},[121],{"type":37,"value":122}," TABLE",{"type":32,"tag":87,"props":124,"children":126},{"style":125},"--shiki-default:#9ECBFF",[127],{"type":37,"value":128}," `project.dataset.identity_graph`",{"type":32,"tag":87,"props":130,"children":131},{"style":104},[132],{"type":37,"value":133}," AS\n",{"type":32,"tag":87,"props":135,"children":137},{"class":89,"line":136},3,[138,143,149,154],{"type":32,"tag":87,"props":139,"children":140},{"style":104},[141],{"type":37,"value":142},"WITH",{"type":32,"tag":87,"props":144,"children":146},{"style":145},"--shiki-default:#E1E4E8",[147],{"type":37,"value":148}," email_hashes ",{"type":32,"tag":87,"props":150,"children":151},{"style":104},[152],{"type":37,"value":153},"AS",{"type":32,"tag":87,"props":155,"children":156},{"style":145},[157],{"type":37,"value":158}," (\n",{"type":32,"tag":87,"props":160,"children":162},{"class":89,"line":161},4,[163],{"type":32,"tag":87,"props":164,"children":165},{"style":104},[166],{"type":37,"value":167},"  SELECT DISTINCT\n",{"type":32,"tag":87,"props":169,"children":171},{"class":89,"line":170},5,[172],{"type":32,"tag":87,"props":173,"children":174},{"style":145},[175],{"type":37,"value":176},"    user_pseudo_id,\n",{"type":32,"tag":87,"props":178,"children":180},{"class":89,"line":179},6,[181,186,192,197,202,206,211,216,221,225,230,235,239],{"type":32,"tag":87,"props":182,"children":183},{"style":145},[184],{"type":37,"value":185},"    TO_HEX(SHA256(",{"type":32,"tag":87,"props":187,"children":189},{"style":188},"--shiki-default:#79B8FF",[190],{"type":37,"value":191},"LOWER",{"type":32,"tag":87,"props":193,"children":194},{"style":145},[195],{"type":37,"value":196},"(",{"type":32,"tag":87,"props":198,"children":199},{"style":188},[200],{"type":37,"value":201},"TRIM",{"type":32,"tag":87,"props":203,"children":204},{"style":145},[205],{"type":37,"value":196},{"type":32,"tag":87,"props":207,"children":208},{"style":188},[209],{"type":37,"value":210},"user_properties",{"type":32,"tag":87,"props":212,"children":213},{"style":145},[214],{"type":37,"value":215},".",{"type":32,"tag":87,"props":217,"children":218},{"style":188},[219],{"type":37,"value":220},"email",{"type":32,"tag":87,"props":222,"children":223},{"style":145},[224],{"type":37,"value":215},{"type":32,"tag":87,"props":226,"children":227},{"style":104},[228],{"type":37,"value":229},"value",{"type":32,"tag":87,"props":231,"children":232},{"style":145},[233],{"type":37,"value":234},")))) ",{"type":32,"tag":87,"props":236,"children":237},{"style":104},[238],{"type":37,"value":153},{"type":32,"tag":87,"props":240,"children":241},{"style":145},[242],{"type":37,"value":243}," email_hash\n",{"type":32,"tag":87,"props":245,"children":247},{"class":89,"line":246},7,[248,253],{"type":32,"tag":87,"props":249,"children":250},{"style":104},[251],{"type":37,"value":252},"  FROM",{"type":32,"tag":87,"props":254,"children":255},{"style":125},[256],{"type":37,"value":257}," `project.dataset.events_*`\n",{"type":32,"tag":87,"props":259,"children":260},{"class":89,"line":26},[261,266,271,275,279,283,287],{"type":32,"tag":87,"props":262,"children":263},{"style":104},[264],{"type":37,"value":265},"  WHERE",{"type":32,"tag":87,"props":267,"children":268},{"style":188},[269],{"type":37,"value":270}," user_properties",{"type":32,"tag":87,"props":272,"children":273},{"style":145},[274],{"type":37,"value":215},{"type":32,"tag":87,"props":276,"children":277},{"style":188},[278],{"type":37,"value":220},{"type":32,"tag":87,"props":280,"children":281},{"style":145},[282],{"type":37,"value":215},{"type":32,"tag":87,"props":284,"children":285},{"style":104},[286],{"type":37,"value":229},{"type":32,"tag":87,"props":288,"children":289},{"style":104},[290],{"type":37,"value":291}," IS NOT NULL\n",{"type":32,"tag":87,"props":293,"children":295},{"class":89,"line":294},9,[296],{"type":32,"tag":87,"props":297,"children":298},{"style":145},[299],{"type":37,"value":300},"),\n",{"type":32,"tag":87,"props":302,"children":304},{"class":89,"line":303},10,[305,310,314],{"type":32,"tag":87,"props":306,"children":307},{"style":145},[308],{"type":37,"value":309},"crm_map ",{"type":32,"tag":87,"props":311,"children":312},{"style":104},[313],{"type":37,"value":153},{"type":32,"tag":87,"props":315,"children":316},{"style":145},[317],{"type":37,"value":158},{"type":32,"tag":87,"props":319,"children":321},{"class":89,"line":320},11,[322],{"type":32,"tag":87,"props":323,"children":324},{"style":104},[325],{"type":37,"value":326},"  SELECT\n",{"type":32,"tag":87,"props":328,"children":330},{"class":89,"line":329},12,[331],{"type":32,"tag":87,"props":332,"children":333},{"style":145},[334],{"type":37,"value":335},"    crm_id,\n",{"type":32,"tag":87,"props":337,"children":339},{"class":89,"line":338},13,[340,344,348,352,356,361,365],{"type":32,"tag":87,"props":341,"children":342},{"style":145},[343],{"type":37,"value":185},{"type":32,"tag":87,"props":345,"children":346},{"style":188},[347],{"type":37,"value":191},{"type":32,"tag":87,"props":349,"children":350},{"style":145},[351],{"type":37,"value":196},{"type":32,"tag":87,"props":353,"children":354},{"style":188},[355],{"type":37,"value":201},{"type":32,"tag":87,"props":357,"children":358},{"style":145},[359],{"type":37,"value":360},"(email)))) ",{"type":32,"tag":87,"props":362,"children":363},{"style":104},[364],{"type":37,"value":153},{"type":32,"tag":87,"props":366,"children":367},{"style":145},[368],{"type":37,"value":243},{"type":32,"tag":87,"props":370,"children":372},{"class":89,"line":371},14,[373,377],{"type":32,"tag":87,"props":374,"children":375},{"style":104},[376],{"type":37,"value":252},{"type":32,"tag":87,"props":378,"children":379},{"style":125},[380],{"type":37,"value":381}," `project.crm.customers`\n",{"type":32,"tag":87,"props":383,"children":385},{"class":89,"line":384},15,[386],{"type":32,"tag":87,"props":387,"children":388},{"style":145},[389],{"type":37,"value":390},")\n",{"type":32,"tag":87,"props":392,"children":394},{"class":89,"line":393},16,[395],{"type":32,"tag":87,"props":396,"children":397},{"style":104},[398],{"type":37,"value":399},"SELECT\n",{"type":32,"tag":87,"props":401,"children":403},{"class":89,"line":402},17,[404,409,413,418],{"type":32,"tag":87,"props":405,"children":406},{"style":188},[407],{"type":37,"value":408},"  e",{"type":32,"tag":87,"props":410,"children":411},{"style":145},[412],{"type":37,"value":215},{"type":32,"tag":87,"props":414,"children":415},{"style":188},[416],{"type":37,"value":417},"user_pseudo_id",{"type":32,"tag":87,"props":419,"children":420},{"style":145},[421],{"type":37,"value":422},",\n",{"type":32,"tag":87,"props":424,"children":426},{"class":89,"line":425},18,[427,432,436,441],{"type":32,"tag":87,"props":428,"children":429},{"style":188},[430],{"type":37,"value":431},"  c",{"type":32,"tag":87,"props":433,"children":434},{"style":145},[435],{"type":37,"value":215},{"type":32,"tag":87,"props":437,"children":438},{"style":188},[439],{"type":37,"value":440},"crm_id",{"type":32,"tag":87,"props":442,"children":443},{"style":145},[444],{"type":37,"value":422},{"type":32,"tag":87,"props":446,"children":448},{"class":89,"line":447},19,[449,453,457],{"type":32,"tag":87,"props":450,"children":451},{"style":188},[452],{"type":37,"value":408},{"type":32,"tag":87,"props":454,"children":455},{"style":145},[456],{"type":37,"value":215},{"type":32,"tag":87,"props":458,"children":459},{"style":188},[460],{"type":37,"value":461},"email_hash\n",{"type":32,"tag":87,"props":463,"children":465},{"class":89,"line":464},20,[466,471],{"type":32,"tag":87,"props":467,"children":468},{"style":104},[469],{"type":37,"value":470},"FROM",{"type":32,"tag":87,"props":472,"children":473},{"style":145},[474],{"type":37,"value":475}," email_hashes e\n",{"type":32,"tag":87,"props":477,"children":479},{"class":89,"line":478},21,[480,485],{"type":32,"tag":87,"props":481,"children":482},{"style":104},[483],{"type":37,"value":484},"INNER JOIN",{"type":32,"tag":87,"props":486,"children":487},{"style":145},[488],{"type":37,"value":489}," crm_map c\n",{"type":32,"tag":87,"props":491,"children":493},{"class":89,"line":492},22,[494,499,504,508,513,518,523,527,531],{"type":32,"tag":87,"props":495,"children":496},{"style":104},[497],{"type":37,"value":498},"  ON",{"type":32,"tag":87,"props":500,"children":501},{"style":188},[502],{"type":37,"value":503}," e",{"type":32,"tag":87,"props":505,"children":506},{"style":145},[507],{"type":37,"value":215},{"type":32,"tag":87,"props":509,"children":510},{"style":188},[511],{"type":37,"value":512},"email_hash",{"type":32,"tag":87,"props":514,"children":515},{"style":104},[516],{"type":37,"value":517}," =",{"type":32,"tag":87,"props":519,"children":520},{"style":188},[521],{"type":37,"value":522}," c",{"type":32,"tag":87,"props":524,"children":525},{"style":145},[526],{"type":37,"value":215},{"type":32,"tag":87,"props":528,"children":529},{"style":188},[530],{"type":37,"value":512},{"type":32,"tag":87,"props":532,"children":533},{"style":145},[534],{"type":37,"value":535},";\n",{"type":32,"tag":33,"props":537,"children":538},{},[539,541,546,548,553,555,560,562,568,570,577,579,585],{"type":37,"value":540},"Этот запрос связывает ",{"type":32,"tag":60,"props":542,"children":544},{"className":543},[],[545],{"type":37,"value":417},{"type":37,"value":547}," из Firebase Analytics с ",{"type":32,"tag":60,"props":549,"children":551},{"className":550},[],[552],{"type":37,"value":440},{"type":37,"value":554}," из CRM через ",{"type":32,"tag":52,"props":556,"children":557},{},[558],{"type":37,"value":559},"точное совпадение",{"type":37,"value":561}," email hash. Хеш email используется как якорный идентификатор. Важный момент: ",{"type":32,"tag":60,"props":563,"children":565},{"className":564},[],[566],{"type":37,"value":567},"LOWER(TRIM())",{"type":37,"value":569}," — если пользователь написал \"",{"type":32,"tag":571,"props":572,"children":574},"a",{"href":573},"mailto:Ali@X.com",[575],{"type":37,"value":576},"Ali@X.com",{"type":37,"value":578},"\", а в CRM записано \"",{"type":32,"tag":571,"props":580,"children":582},{"href":581},"mailto:ali@x.com",[583],{"type":37,"value":584},"ali@x.com",{"type":37,"value":586},"\", хеш совпадения разрушится. Поэтому нормализация — первый шаг pipeline.",{"type":32,"tag":33,"props":588,"children":589},{},[590],{"type":37,"value":591},"Точность deterministic match 100%, recall низкий — находит только записи, где оба система делят идентификатор. Если пользователь вышел с веб-сайта без email, он не попадает в этот graph.",{"type":32,"tag":593,"props":594,"children":596},"h3",{"id":595},"hash-collision-и-приватность",[597],{"type":37,"value":598},"Hash Collision и Приватность",{"type":32,"tag":33,"props":600,"children":601},{},[602],{"type":37,"value":603},"Вероятность коллизии SHA-256 теоретически 2^-256 — в практике практически ноль. Однако GDPR Article 32 не приравнивает hash к pseudonymization; хеш сам по себе не является anonymization. Комбинация email hash + IP + timestamp может привести к re-identification. Поэтому таблицы хешей должны быть защищены encryption-at-rest + column-level access control.",{"type":32,"tag":40,"props":605,"children":607},{"id":606},"probabilistic-linking-граф-ориентированное-вероятностное-совпадение",[608],{"type":37,"value":609},"Probabilistic Linking: Граф-ориентированное Вероятностное Совпадение",{"type":32,"tag":33,"props":611,"children":612},{},[613,615,620,622,627,628,633],{"type":37,"value":614},"Когда deterministic join не срабатывает, включается probabilistic matching. Вы связываете два record с разными идентификаторами через ",{"type":32,"tag":52,"props":616,"children":617},{},[618],{"type":37,"value":619},"поведенческое сходство",{"type":37,"value":621},", ",{"type":32,"tag":52,"props":623,"children":624},{},[625],{"type":37,"value":626},"device fingerprint",{"type":37,"value":621},{"type":32,"tag":52,"props":629,"children":630},{},[631],{"type":37,"value":632},"timezone + user-agent",{"type":37,"value":634},". Не машинное обучение — взвешенная оценка + пороговая система.",{"type":32,"tag":636,"props":637,"children":638},"table",{},[639,663],{"type":32,"tag":640,"props":641,"children":642},"thead",{},[643],{"type":32,"tag":644,"props":645,"children":646},"tr",{},[647,653,658],{"type":32,"tag":648,"props":649,"children":650},"th",{},[651],{"type":37,"value":652},"Сигнал",{"type":32,"tag":648,"props":654,"children":655},{},[656],{"type":37,"value":657},"Вес",{"type":32,"tag":648,"props":659,"children":660},{},[661],{"type":37,"value":662},"Пример",{"type":32,"tag":664,"props":665,"children":666},"tbody",{},[667,686,704,722,740],{"type":32,"tag":644,"props":668,"children":669},{},[670,676,681],{"type":32,"tag":671,"props":672,"children":673},"td",{},[674],{"type":37,"value":675},"Один IP (в течение 24 часов)",{"type":32,"tag":671,"props":677,"children":678},{},[679],{"type":37,"value":680},"0.3",{"type":32,"tag":671,"props":682,"children":683},{},[684],{"type":37,"value":685},"192.168.1.10",{"type":32,"tag":644,"props":687,"children":688},{},[689,694,699],{"type":32,"tag":671,"props":690,"children":691},{},[692],{"type":37,"value":693},"Один User-Agent",{"type":32,"tag":671,"props":695,"children":696},{},[697],{"type":37,"value":698},"0.2",{"type":32,"tag":671,"props":700,"children":701},{},[702],{"type":37,"value":703},"Chrome 120 \u002F Mac",{"type":32,"tag":644,"props":705,"children":706},{},[707,712,717],{"type":32,"tag":671,"props":708,"children":709},{},[710],{"type":37,"value":711},"Одна географическая локация",{"type":32,"tag":671,"props":713,"children":714},{},[715],{"type":37,"value":716},"0.15",{"type":32,"tag":671,"props":718,"children":719},{},[720],{"type":37,"value":721},"Istanbul, Kadıköy",{"type":32,"tag":644,"props":723,"children":724},{},[725,730,735],{"type":32,"tag":671,"props":726,"children":727},{},[728],{"type":37,"value":729},"Один клик на кампанию",{"type":32,"tag":671,"props":731,"children":732},{},[733],{"type":37,"value":734},"0.25",{"type":32,"tag":671,"props":736,"children":737},{},[738],{"type":37,"value":739},"utm_campaign=spring_sale",{"type":32,"tag":644,"props":741,"children":742},{},[743,748,753],{"type":32,"tag":671,"props":744,"children":745},{},[746],{"type":37,"value":747},"Одна последовательность просмотра товара",{"type":32,"tag":671,"props":749,"children":750},{},[751],{"type":37,"value":752},"0.1",{"type":32,"tag":671,"props":754,"children":755},{},[756],{"type":37,"value":757},"product_123 → product_456",{"type":32,"tag":33,"props":759,"children":760},{},[761,763,768],{"type":37,"value":762},"Общий балл ≥ 0.7 означает, что две session ",{"type":32,"tag":52,"props":764,"children":765},{},[766],{"type":37,"value":767},"предположительно",{"type":37,"value":769}," одного человека. Этот порог регулируется в зависимости от dataset — на e-commerce может быть достаточно 0.65, в fintech нужна 0.85.",{"type":32,"tag":77,"props":771,"children":773},{"className":79,"code":772,"language":81,"meta":16,"style":16},"-- Пример вероятностного скоринга\nWITH sessions AS (\n  SELECT\n    session_id,\n    user_pseudo_id,\n    device.operating_system,\n    device.web_info.browser,\n    geo.city,\n    traffic_source.medium,\n    ARRAY_AGG(ecommerce.items.item_id ORDER BY event_timestamp) AS item_sequence\n  FROM `project.dataset.events_*`\n  WHERE event_name = 'page_view'\n  GROUP BY 1,2,3,4,5,6\n)\nSELECT\n  a.session_id AS session_a,\n  b.session_id AS session_b,\n  (CASE WHEN a.operating_system = b.operating_system THEN 0.2 ELSE 0 END +\n   CASE WHEN a.browser = b.browser THEN 0.2 ELSE 0 END +\n   CASE WHEN a.city = b.city THEN 0.15 ELSE 0 END +\n   CASE WHEN a.medium = b.medium THEN 0.25 ELSE 0 END +\n   CASE WHEN a.item_sequence = b.item_sequence THEN 0.2 ELSE 0 END\n  ) AS match_score\nFROM sessions a\nCROSS JOIN sessions b\nWHERE a.session_id \u003C b.session_id  -- оптимизация self-join\n  AND a.user_pseudo_id != b.user_pseudo_id\nHAVING match_score >= 0.7;\n",[774],{"type":32,"tag":60,"props":775,"children":776},{"__ignoreMap":16},[777,785,806,813,821,828,849,870,891,912,958,969,991,1050,1057,1064,1090,1115,1200,1273,1345,1417,1486,1504,1521,1539,1582,1621],{"type":32,"tag":87,"props":778,"children":779},{"class":89,"line":90},[780],{"type":32,"tag":87,"props":781,"children":782},{"style":94},[783],{"type":37,"value":784},"-- Пример вероятностного скоринга\n",{"type":32,"tag":87,"props":786,"children":787},{"class":89,"line":100},[788,792,797,802],{"type":32,"tag":87,"props":789,"children":790},{"style":104},[791],{"type":37,"value":142},{"type":32,"tag":87,"props":793,"children":794},{"style":104},[795],{"type":37,"value":796}," sessions",{"type":32,"tag":87,"props":798,"children":799},{"style":104},[800],{"type":37,"value":801}," AS",{"type":32,"tag":87,"props":803,"children":804},{"style":145},[805],{"type":37,"value":158},{"type":32,"tag":87,"props":807,"children":808},{"class":89,"line":136},[809],{"type":32,"tag":87,"props":810,"children":811},{"style":104},[812],{"type":37,"value":326},{"type":32,"tag":87,"props":814,"children":815},{"class":89,"line":161},[816],{"type":32,"tag":87,"props":817,"children":818},{"style":145},[819],{"type":37,"value":820},"    session_id,\n",{"type":32,"tag":87,"props":822,"children":823},{"class":89,"line":170},[824],{"type":32,"tag":87,"props":825,"children":826},{"style":145},[827],{"type":37,"value":176},{"type":32,"tag":87,"props":829,"children":830},{"class":89,"line":179},[831,836,840,845],{"type":32,"tag":87,"props":832,"children":833},{"style":188},[834],{"type":37,"value":835},"    device",{"type":32,"tag":87,"props":837,"children":838},{"style":145},[839],{"type":37,"value":215},{"type":32,"tag":87,"props":841,"children":842},{"style":188},[843],{"type":37,"value":844},"operating_system",{"type":32,"tag":87,"props":846,"children":847},{"style":145},[848],{"type":37,"value":422},{"type":32,"tag":87,"props":850,"children":851},{"class":89,"line":246},[852,856,860,865],{"type":32,"tag":87,"props":853,"children":854},{"style":188},[855],{"type":37,"value":835},{"type":32,"tag":87,"props":857,"children":858},{"style":145},[859],{"type":37,"value":215},{"type":32,"tag":87,"props":861,"children":862},{"style":188},[863],{"type":37,"value":864},"web_info",{"type":32,"tag":87,"props":866,"children":867},{"style":145},[868],{"type":37,"value":869},".browser,\n",{"type":32,"tag":87,"props":871,"children":872},{"class":89,"line":26},[873,878,882,887],{"type":32,"tag":87,"props":874,"children":875},{"style":188},[876],{"type":37,"value":877},"    geo",{"type":32,"tag":87,"props":879,"children":880},{"style":145},[881],{"type":37,"value":215},{"type":32,"tag":87,"props":883,"children":884},{"style":188},[885],{"type":37,"value":886},"city",{"type":32,"tag":87,"props":888,"children":889},{"style":145},[890],{"type":37,"value":422},{"type":32,"tag":87,"props":892,"children":893},{"class":89,"line":294},[894,899,903,908],{"type":32,"tag":87,"props":895,"children":896},{"style":188},[897],{"type":37,"value":898},"    traffic_source",{"type":32,"tag":87,"props":900,"children":901},{"style":145},[902],{"type":37,"value":215},{"type":32,"tag":87,"props":904,"children":905},{"style":188},[906],{"type":37,"value":907},"medium",{"type":32,"tag":87,"props":909,"children":910},{"style":145},[911],{"type":37,"value":422},{"type":32,"tag":87,"props":913,"children":914},{"class":89,"line":303},[915,920,925,929,934,939,944,949,953],{"type":32,"tag":87,"props":916,"children":917},{"style":145},[918],{"type":37,"value":919},"    ARRAY_AGG(",{"type":32,"tag":87,"props":921,"children":922},{"style":188},[923],{"type":37,"value":924},"ecommerce",{"type":32,"tag":87,"props":926,"children":927},{"style":145},[928],{"type":37,"value":215},{"type":32,"tag":87,"props":930,"children":931},{"style":188},[932],{"type":37,"value":933},"items",{"type":32,"tag":87,"props":935,"children":936},{"style":145},[937],{"type":37,"value":938},".item_id ",{"type":32,"tag":87,"props":940,"children":941},{"style":104},[942],{"type":37,"value":943},"ORDER BY",{"type":32,"tag":87,"props":945,"children":946},{"style":145},[947],{"type":37,"value":948}," event_timestamp) ",{"type":32,"tag":87,"props":950,"children":951},{"style":104},[952],{"type":37,"value":153},{"type":32,"tag":87,"props":954,"children":955},{"style":145},[956],{"type":37,"value":957}," item_sequence\n",{"type":32,"tag":87,"props":959,"children":960},{"class":89,"line":320},[961,965],{"type":32,"tag":87,"props":962,"children":963},{"style":104},[964],{"type":37,"value":252},{"type":32,"tag":87,"props":966,"children":967},{"style":125},[968],{"type":37,"value":257},{"type":32,"tag":87,"props":970,"children":971},{"class":89,"line":329},[972,976,981,986],{"type":32,"tag":87,"props":973,"children":974},{"style":104},[975],{"type":37,"value":265},{"type":32,"tag":87,"props":977,"children":978},{"style":145},[979],{"type":37,"value":980}," event_name ",{"type":32,"tag":87,"props":982,"children":983},{"style":104},[984],{"type":37,"value":985},"=",{"type":32,"tag":87,"props":987,"children":988},{"style":125},[989],{"type":37,"value":990}," 'page_view'\n",{"type":32,"tag":87,"props":992,"children":993},{"class":89,"line":338},[994,999,1004,1009,1014,1018,1023,1027,1032,1036,1041,1045],{"type":32,"tag":87,"props":995,"children":996},{"style":104},[997],{"type":37,"value":998},"  GROUP BY",{"type":32,"tag":87,"props":1000,"children":1001},{"style":188},[1002],{"type":37,"value":1003}," 1",{"type":32,"tag":87,"props":1005,"children":1006},{"style":145},[1007],{"type":37,"value":1008},",",{"type":32,"tag":87,"props":1010,"children":1011},{"style":188},[1012],{"type":37,"value":1013},"2",{"type":32,"tag":87,"props":1015,"children":1016},{"style":145},[1017],{"type":37,"value":1008},{"type":32,"tag":87,"props":1019,"children":1020},{"style":188},[1021],{"type":37,"value":1022},"3",{"type":32,"tag":87,"props":1024,"children":1025},{"style":145},[1026],{"type":37,"value":1008},{"type":32,"tag":87,"props":1028,"children":1029},{"style":188},[1030],{"type":37,"value":1031},"4",{"type":32,"tag":87,"props":1033,"children":1034},{"style":145},[1035],{"type":37,"value":1008},{"type":32,"tag":87,"props":1037,"children":1038},{"style":188},[1039],{"type":37,"value":1040},"5",{"type":32,"tag":87,"props":1042,"children":1043},{"style":145},[1044],{"type":37,"value":1008},{"type":32,"tag":87,"props":1046,"children":1047},{"style":188},[1048],{"type":37,"value":1049},"6\n",{"type":32,"tag":87,"props":1051,"children":1052},{"class":89,"line":371},[1053],{"type":32,"tag":87,"props":1054,"children":1055},{"style":145},[1056],{"type":37,"value":390},{"type":32,"tag":87,"props":1058,"children":1059},{"class":89,"line":384},[1060],{"type":32,"tag":87,"props":1061,"children":1062},{"style":104},[1063],{"type":37,"value":399},{"type":32,"tag":87,"props":1065,"children":1066},{"class":89,"line":393},[1067,1072,1076,1081,1085],{"type":32,"tag":87,"props":1068,"children":1069},{"style":188},[1070],{"type":37,"value":1071},"  a",{"type":32,"tag":87,"props":1073,"children":1074},{"style":145},[1075],{"type":37,"value":215},{"type":32,"tag":87,"props":1077,"children":1078},{"style":188},[1079],{"type":37,"value":1080},"session_id",{"type":32,"tag":87,"props":1082,"children":1083},{"style":104},[1084],{"type":37,"value":801},{"type":32,"tag":87,"props":1086,"children":1087},{"style":145},[1088],{"type":37,"value":1089}," session_a,\n",{"type":32,"tag":87,"props":1091,"children":1092},{"class":89,"line":402},[1093,1098,1102,1106,1110],{"type":32,"tag":87,"props":1094,"children":1095},{"style":188},[1096],{"type":37,"value":1097},"  b",{"type":32,"tag":87,"props":1099,"children":1100},{"style":145},[1101],{"type":37,"value":215},{"type":32,"tag":87,"props":1103,"children":1104},{"style":188},[1105],{"type":37,"value":1080},{"type":32,"tag":87,"props":1107,"children":1108},{"style":104},[1109],{"type":37,"value":801},{"type":32,"tag":87,"props":1111,"children":1112},{"style":145},[1113],{"type":37,"value":1114}," session_b,\n",{"type":32,"tag":87,"props":1116,"children":1117},{"class":89,"line":425},[1118,1123,1128,1133,1138,1142,1146,1150,1155,1159,1163,1168,1173,1177,1181,1186,1190,1195],{"type":32,"tag":87,"props":1119,"children":1120},{"style":145},[1121],{"type":37,"value":1122},"  (",{"type":32,"tag":87,"props":1124,"children":1125},{"style":104},[1126],{"type":37,"value":1127},"CASE",{"type":32,"tag":87,"props":1129,"children":1130},{"style":104},[1131],{"type":37,"value":1132}," WHEN",{"type":32,"tag":87,"props":1134,"children":1135},{"style":188},[1136],{"type":37,"value":1137}," a",{"type":32,"tag":87,"props":1139,"children":1140},{"style":145},[1141],{"type":37,"value":215},{"type":32,"tag":87,"props":1143,"children":1144},{"style":188},[1145],{"type":37,"value":844},{"type":32,"tag":87,"props":1147,"children":1148},{"style":104},[1149],{"type":37,"value":517},{"type":32,"tag":87,"props":1151,"children":1152},{"style":188},[1153],{"type":37,"value":1154}," b",{"type":32,"tag":87,"props":1156,"children":1157},{"style":145},[1158],{"type":37,"value":215},{"type":32,"tag":87,"props":1160,"children":1161},{"style":188},[1162],{"type":37,"value":844},{"type":32,"tag":87,"props":1164,"children":1165},{"style":104},[1166],{"type":37,"value":1167}," THEN",{"type":32,"tag":87,"props":1169,"children":1170},{"style":188},[1171],{"type":37,"value":1172}," 0",{"type":32,"tag":87,"props":1174,"children":1175},{"style":145},[1176],{"type":37,"value":215},{"type":32,"tag":87,"props":1178,"children":1179},{"style":188},[1180],{"type":37,"value":1013},{"type":32,"tag":87,"props":1182,"children":1183},{"style":104},[1184],{"type":37,"value":1185}," ELSE",{"type":32,"tag":87,"props":1187,"children":1188},{"style":188},[1189],{"type":37,"value":1172},{"type":32,"tag":87,"props":1191,"children":1192},{"style":104},[1193],{"type":37,"value":1194}," END",{"type":32,"tag":87,"props":1196,"children":1197},{"style":104},[1198],{"type":37,"value":1199}," +\n",{"type":32,"tag":87,"props":1201,"children":1202},{"class":89,"line":447},[1203,1208,1212,1216,1220,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269],{"type":32,"tag":87,"props":1204,"children":1205},{"style":104},[1206],{"type":37,"value":1207},"   CASE",{"type":32,"tag":87,"props":1209,"children":1210},{"style":104},[1211],{"type":37,"value":1132},{"type":32,"tag":87,"props":1213,"children":1214},{"style":188},[1215],{"type":37,"value":1137},{"type":32,"tag":87,"props":1217,"children":1218},{"style":145},[1219],{"type":37,"value":215},{"type":32,"tag":87,"props":1221,"children":1222},{"style":188},[1223],{"type":37,"value":1224},"browser",{"type":32,"tag":87,"props":1226,"children":1227},{"style":104},[1228],{"type":37,"value":517},{"type":32,"tag":87,"props":1230,"children":1231},{"style":188},[1232],{"type":37,"value":1154},{"type":32,"tag":87,"props":1234,"children":1235},{"style":145},[1236],{"type":37,"value":215},{"type":32,"tag":87,"props":1238,"children":1239},{"style":188},[1240],{"type":37,"value":1224},{"type":32,"tag":87,"props":1242,"children":1243},{"style":104},[1244],{"type":37,"value":1167},{"type":32,"tag":87,"props":1246,"children":1247},{"style":188},[1248],{"type":37,"value":1172},{"type":32,"tag":87,"props":1250,"children":1251},{"style":145},[1252],{"type":37,"value":215},{"type":32,"tag":87,"props":1254,"children":1255},{"style":188},[1256],{"type":37,"value":1013},{"type":32,"tag":87,"props":1258,"children":1259},{"style":104},[1260],{"type":37,"value":1185},{"type":32,"tag":87,"props":1262,"children":1263},{"style":188},[1264],{"type":37,"value":1172},{"type":32,"tag":87,"props":1266,"children":1267},{"style":104},[1268],{"type":37,"value":1194},{"type":32,"tag":87,"props":1270,"children":1271},{"style":104},[1272],{"type":37,"value":1199},{"type":32,"tag":87,"props":1274,"children":1275},{"class":89,"line":464},[1276,1280,1284,1288,1292,1296,1300,1304,1308,1312,1316,1320,1324,1329,1333,1337,1341],{"type":32,"tag":87,"props":1277,"children":1278},{"style":104},[1279],{"type":37,"value":1207},{"type":32,"tag":87,"props":1281,"children":1282},{"style":104},[1283],{"type":37,"value":1132},{"type":32,"tag":87,"props":1285,"children":1286},{"style":188},[1287],{"type":37,"value":1137},{"type":32,"tag":87,"props":1289,"children":1290},{"style":145},[1291],{"type":37,"value":215},{"type":32,"tag":87,"props":1293,"children":1294},{"style":188},[1295],{"type":37,"value":886},{"type":32,"tag":87,"props":1297,"children":1298},{"style":104},[1299],{"type":37,"value":517},{"type":32,"tag":87,"props":1301,"children":1302},{"style":188},[1303],{"type":37,"value":1154},{"type":32,"tag":87,"props":1305,"children":1306},{"style":145},[1307],{"type":37,"value":215},{"type":32,"tag":87,"props":1309,"children":1310},{"style":188},[1311],{"type":37,"value":886},{"type":32,"tag":87,"props":1313,"children":1314},{"style":104},[1315],{"type":37,"value":1167},{"type":32,"tag":87,"props":1317,"children":1318},{"style":188},[1319],{"type":37,"value":1172},{"type":32,"tag":87,"props":1321,"children":1322},{"style":145},[1323],{"type":37,"value":215},{"type":32,"tag":87,"props":1325,"children":1326},{"style":188},[1327],{"type":37,"value":1328},"15",{"type":32,"tag":87,"props":1330,"children":1331},{"style":104},[1332],{"type":37,"value":1185},{"type":32,"tag":87,"props":1334,"children":1335},{"style":188},[1336],{"type":37,"value":1172},{"type":32,"tag":87,"props":1338,"children":1339},{"style":104},[1340],{"type":37,"value":1194},{"type":32,"tag":87,"props":1342,"children":1343},{"style":104},[1344],{"type":37,"value":1199},{"type":32,"tag":87,"props":1346,"children":1347},{"class":89,"line":478},[1348,1352,1356,1360,1364,1368,1372,1376,1380,1384,1388,1392,1396,1401,1405,1409,1413],{"type":32,"tag":87,"props":1349,"children":1350},{"style":104},[1351],{"type":37,"value":1207},{"type":32,"tag":87,"props":1353,"children":1354},{"style":104},[1355],{"type":37,"value":1132},{"type":32,"tag":87,"props":1357,"children":1358},{"style":188},[1359],{"type":37,"value":1137},{"type":32,"tag":87,"props":1361,"children":1362},{"style":145},[1363],{"type":37,"value":215},{"type":32,"tag":87,"props":1365,"children":1366},{"style":188},[1367],{"type":37,"value":907},{"type":32,"tag":87,"props":1369,"children":1370},{"style":104},[1371],{"type":37,"value":517},{"type":32,"tag":87,"props":1373,"children":1374},{"style":188},[1375],{"type":37,"value":1154},{"type":32,"tag":87,"props":1377,"children":1378},{"style":145},[1379],{"type":37,"value":215},{"type":32,"tag":87,"props":1381,"children":1382},{"style":188},[1383],{"type":37,"value":907},{"type":32,"tag":87,"props":1385,"children":1386},{"style":104},[1387],{"type":37,"value":1167},{"type":32,"tag":87,"props":1389,"children":1390},{"style":188},[1391],{"type":37,"value":1172},{"type":32,"tag":87,"props":1393,"children":1394},{"style":145},[1395],{"type":37,"value":215},{"type":32,"tag":87,"props":1397,"children":1398},{"style":188},[1399],{"type":37,"value":1400},"25",{"type":32,"tag":87,"props":1402,"children":1403},{"style":104},[1404],{"type":37,"value":1185},{"type":32,"tag":87,"props":1406,"children":1407},{"style":188},[1408],{"type":37,"value":1172},{"type":32,"tag":87,"props":1410,"children":1411},{"style":104},[1412],{"type":37,"value":1194},{"type":32,"tag":87,"props":1414,"children":1415},{"style":104},[1416],{"type":37,"value":1199},{"type":32,"tag":87,"props":1418,"children":1419},{"class":89,"line":492},[1420,1424,1428,1432,1436,1441,1445,1449,1453,1457,1461,1465,1469,1473,1477,1481],{"type":32,"tag":87,"props":1421,"children":1422},{"style":104},[1423],{"type":37,"value":1207},{"type":32,"tag":87,"props":1425,"children":1426},{"style":104},[1427],{"type":37,"value":1132},{"type":32,"tag":87,"props":1429,"children":1430},{"style":188},[1431],{"type":37,"value":1137},{"type":32,"tag":87,"props":1433,"children":1434},{"style":145},[1435],{"type":37,"value":215},{"type":32,"tag":87,"props":1437,"children":1438},{"style":188},[1439],{"type":37,"value":1440},"item_sequence",{"type":32,"tag":87,"props":1442,"children":1443},{"style":104},[1444],{"type":37,"value":517},{"type":32,"tag":87,"props":1446,"children":1447},{"style":188},[1448],{"type":37,"value":1154},{"type":32,"tag":87,"props":1450,"children":1451},{"style":145},[1452],{"type":37,"value":215},{"type":32,"tag":87,"props":1454,"children":1455},{"style":188},[1456],{"type":37,"value":1440},{"type":32,"tag":87,"props":1458,"children":1459},{"style":104},[1460],{"type":37,"value":1167},{"type":32,"tag":87,"props":1462,"children":1463},{"style":188},[1464],{"type":37,"value":1172},{"type":32,"tag":87,"props":1466,"children":1467},{"style":145},[1468],{"type":37,"value":215},{"type":32,"tag":87,"props":1470,"children":1471},{"style":188},[1472],{"type":37,"value":1013},{"type":32,"tag":87,"props":1474,"children":1475},{"style":104},[1476],{"type":37,"value":1185},{"type":32,"tag":87,"props":1478,"children":1479},{"style":188},[1480],{"type":37,"value":1172},{"type":32,"tag":87,"props":1482,"children":1483},{"style":104},[1484],{"type":37,"value":1485}," END\n",{"type":32,"tag":87,"props":1487,"children":1489},{"class":89,"line":1488},23,[1490,1495,1499],{"type":32,"tag":87,"props":1491,"children":1492},{"style":145},[1493],{"type":37,"value":1494},"  ) ",{"type":32,"tag":87,"props":1496,"children":1497},{"style":104},[1498],{"type":37,"value":153},{"type":32,"tag":87,"props":1500,"children":1501},{"style":145},[1502],{"type":37,"value":1503}," match_score\n",{"type":32,"tag":87,"props":1505,"children":1507},{"class":89,"line":1506},24,[1508,1512,1516],{"type":32,"tag":87,"props":1509,"children":1510},{"style":104},[1511],{"type":37,"value":470},{"type":32,"tag":87,"props":1513,"children":1514},{"style":104},[1515],{"type":37,"value":796},{"type":32,"tag":87,"props":1517,"children":1518},{"style":145},[1519],{"type":37,"value":1520}," a\n",{"type":32,"tag":87,"props":1522,"children":1524},{"class":89,"line":1523},25,[1525,1530,1534],{"type":32,"tag":87,"props":1526,"children":1527},{"style":104},[1528],{"type":37,"value":1529},"CROSS JOIN",{"type":32,"tag":87,"props":1531,"children":1532},{"style":104},[1533],{"type":37,"value":796},{"type":32,"tag":87,"props":1535,"children":1536},{"style":145},[1537],{"type":37,"value":1538}," b\n",{"type":32,"tag":87,"props":1540,"children":1542},{"class":89,"line":1541},26,[1543,1548,1552,1556,1560,1565,1569,1573,1577],{"type":32,"tag":87,"props":1544,"children":1545},{"style":104},[1546],{"type":37,"value":1547},"WHERE",{"type":32,"tag":87,"props":1549,"children":1550},{"style":188},[1551],{"type":37,"value":1137},{"type":32,"tag":87,"props":1553,"children":1554},{"style":145},[1555],{"type":37,"value":215},{"type":32,"tag":87,"props":1557,"children":1558},{"style":188},[1559],{"type":37,"value":1080},{"type":32,"tag":87,"props":1561,"children":1562},{"style":104},[1563],{"type":37,"value":1564}," \u003C",{"type":32,"tag":87,"props":1566,"children":1567},{"style":188},[1568],{"type":37,"value":1154},{"type":32,"tag":87,"props":1570,"children":1571},{"style":145},[1572],{"type":37,"value":215},{"type":32,"tag":87,"props":1574,"children":1575},{"style":188},[1576],{"type":37,"value":1080},{"type":32,"tag":87,"props":1578,"children":1579},{"style":94},[1580],{"type":37,"value":1581},"  -- оптимизация self-join\n",{"type":32,"tag":87,"props":1583,"children":1585},{"class":89,"line":1584},27,[1586,1591,1595,1599,1603,1608,1612,1616],{"type":32,"tag":87,"props":1587,"children":1588},{"style":104},[1589],{"type":37,"value":1590},"  AND",{"type":32,"tag":87,"props":1592,"children":1593},{"style":188},[1594],{"type":37,"value":1137},{"type":32,"tag":87,"props":1596,"children":1597},{"style":145},[1598],{"type":37,"value":215},{"type":32,"tag":87,"props":1600,"children":1601},{"style":188},[1602],{"type":37,"value":417},{"type":32,"tag":87,"props":1604,"children":1605},{"style":104},[1606],{"type":37,"value":1607}," !=",{"type":32,"tag":87,"props":1609,"children":1610},{"style":188},[1611],{"type":37,"value":1154},{"type":32,"tag":87,"props":1613,"children":1614},{"style":145},[1615],{"type":37,"value":215},{"type":32,"tag":87,"props":1617,"children":1618},{"style":188},[1619],{"type":37,"value":1620},"user_pseudo_id\n",{"type":32,"tag":87,"props":1622,"children":1624},{"class":89,"line":1623},28,[1625,1630,1635,1640,1644,1648,1653],{"type":32,"tag":87,"props":1626,"children":1627},{"style":104},[1628],{"type":37,"value":1629},"HAVING",{"type":32,"tag":87,"props":1631,"children":1632},{"style":145},[1633],{"type":37,"value":1634}," match_score ",{"type":32,"tag":87,"props":1636,"children":1637},{"style":104},[1638],{"type":37,"value":1639},">=",{"type":32,"tag":87,"props":1641,"children":1642},{"style":188},[1643],{"type":37,"value":1172},{"type":32,"tag":87,"props":1645,"children":1646},{"style":145},[1647],{"type":37,"value":215},{"type":32,"tag":87,"props":1649,"children":1650},{"style":188},[1651],{"type":37,"value":1652},"7",{"type":32,"tag":87,"props":1654,"children":1655},{"style":145},[1656],{"type":37,"value":535},{"type":32,"tag":33,"props":1658,"children":1659},{},[1660,1662,1667],{"type":37,"value":1661},"Этот запрос сравнивает ",{"type":32,"tag":52,"props":1663,"children":1664},{},[1665],{"type":37,"value":1666},"все пары session",{"type":37,"value":1668}," — N² сложность. При 1M session это 500 миллиардов сравнений. В production нужно partitioning: временное окно (7 дней), geo-фильтр (один город), тип устройства (mobile-mobile).",{"type":32,"tag":33,"props":1670,"children":1671},{},[1672],{"type":37,"value":1673},"Уровень false positive в probabilistic link 5-15%. Поэтому на downstream activation (CDP segment push, email-кампания) эти ID должны быть помечены флагом \"potential duplicate\".",{"type":32,"tag":40,"props":1675,"children":1677},{"id":1676},"household-identity-один-девайс-разные-пользователи",[1678],{"type":37,"value":1679},"Household Identity: Один Девайс, Разные Пользователи",{"type":32,"tag":33,"props":1681,"children":1682},{},[1683],{"type":37,"value":1684},"Планшет или Smart TV используют несколько человек. Детерминистское или вероятностное совпадение здесь объединяет разные семейные профили в один ID — ведёт к неправильной персонализации. Household identity resolution пытается разделить эти сценарии.",{"type":32,"tag":33,"props":1686,"children":1687},{},[1688,1693],{"type":32,"tag":52,"props":1689,"children":1690},{},[1691],{"type":37,"value":1692},"Session-level fingerprint:",{"type":37,"value":1694}," Разные пользователи, логинящиеся на одном девайсе в разное время, показывают разные browsing pattern. Пользователь, ищущий одежду в 08:00, отличается от того, кто ищет электронику в 23:00.",{"type":32,"tag":33,"props":1696,"children":1697},{},[1698,1703],{"type":32,"tag":52,"props":1699,"children":1700},{},[1701],{"type":37,"value":1702},"Behavioral clustering:",{"type":37,"value":1704}," K-means или hierarchical clustering группируют session. Если центроиды кластеров разные, вы создаёте несколько \"виртуальных пользователей\" под одним device_id.",{"type":32,"tag":77,"props":1706,"children":1708},{"className":79,"code":1707,"language":81,"meta":16,"style":16},"-- Feature extraction для household clustering\nCREATE OR REPLACE TABLE `project.dataset.household_features` AS\nSELECT\n  device_id,\n  EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) AS hour_of_day,\n  COUNT(DISTINCT CASE WHEN event_name = 'purchase' THEN ecommerce.transaction_id END) AS purchase_count,\n  APPROX_TOP_COUNT(ecommerce.items.item_category, 3) AS top_categories,\n  AVG(ecommerce.purchase_revenue_in_usd) AS avg_basket_value\nFROM `project.dataset.events_*`\nWHERE device_id IS NOT NULL\nGROUP BY device_id, hour_of_day;\n",[1709],{"type":32,"tag":60,"props":1710,"children":1711},{"__ignoreMap":16},[1712,1720,1748,1755,1763,1795,1870,1912,1950,1961,1978],{"type":32,"tag":87,"props":1713,"children":1714},{"class":89,"line":90},[1715],{"type":32,"tag":87,"props":1716,"children":1717},{"style":94},[1718],{"type":37,"value":1719},"-- Feature extraction для household clustering\n",{"type":32,"tag":87,"props":1721,"children":1722},{"class":89,"line":100},[1723,1727,1731,1735,1739,1744],{"type":32,"tag":87,"props":1724,"children":1725},{"style":104},[1726],{"type":37,"value":107},{"type":32,"tag":87,"props":1728,"children":1729},{"style":104},[1730],{"type":37,"value":112},{"type":32,"tag":87,"props":1732,"children":1733},{"style":104},[1734],{"type":37,"value":117},{"type":32,"tag":87,"props":1736,"children":1737},{"style":104},[1738],{"type":37,"value":122},{"type":32,"tag":87,"props":1740,"children":1741},{"style":125},[1742],{"type":37,"value":1743}," `project.dataset.household_features`",{"type":32,"tag":87,"props":1745,"children":1746},{"style":104},[1747],{"type":37,"value":133},{"type":32,"tag":87,"props":1749,"children":1750},{"class":89,"line":136},[1751],{"type":32,"tag":87,"props":1752,"children":1753},{"style":104},[1754],{"type":37,"value":399},{"type":32,"tag":87,"props":1756,"children":1757},{"class":89,"line":161},[1758],{"type":32,"tag":87,"props":1759,"children":1760},{"style":145},[1761],{"type":37,"value":1762},"  device_id,\n",{"type":32,"tag":87,"props":1764,"children":1765},{"class":89,"line":170},[1766,1771,1776,1781,1786,1790],{"type":32,"tag":87,"props":1767,"children":1768},{"style":145},[1769],{"type":37,"value":1770},"  EXTRACT(",{"type":32,"tag":87,"props":1772,"children":1773},{"style":104},[1774],{"type":37,"value":1775},"HOUR",{"type":32,"tag":87,"props":1777,"children":1778},{"style":104},[1779],{"type":37,"value":1780}," FROM",{"type":32,"tag":87,"props":1782,"children":1783},{"style":145},[1784],{"type":37,"value":1785}," TIMESTAMP_MICROS(event_timestamp)) ",{"type":32,"tag":87,"props":1787,"children":1788},{"style":104},[1789],{"type":37,"value":153},{"type":32,"tag":87,"props":1791,"children":1792},{"style":145},[1793],{"type":37,"value":1794}," hour_of_day,\n",{"type":32,"tag":87,"props":1796,"children":1797},{"class":89,"line":179},[1798,1803,1807,1812,1817,1821,1825,1829,1834,1838,1843,1847,1852,1856,1861,1865],{"type":32,"tag":87,"props":1799,"children":1800},{"style":188},[1801],{"type":37,"value":1802},"  COUNT",{"type":32,"tag":87,"props":1804,"children":1805},{"style":145},[1806],{"type":37,"value":196},{"type":32,"tag":87,"props":1808,"children":1809},{"style":104},[1810],{"type":37,"value":1811},"DISTINCT",{"type":32,"tag":87,"props":1813,"children":1814},{"style":104},[1815],{"type":37,"value":1816}," CASE",{"type":32,"tag":87,"props":1818,"children":1819},{"style":104},[1820],{"type":37,"value":1132},{"type":32,"tag":87,"props":1822,"children":1823},{"style":145},[1824],{"type":37,"value":980},{"type":32,"tag":87,"props":1826,"children":1827},{"style":104},[1828],{"type":37,"value":985},{"type":32,"tag":87,"props":1830,"children":1831},{"style":125},[1832],{"type":37,"value":1833}," 'purchase'",{"type":32,"tag":87,"props":1835,"children":1836},{"style":104},[1837],{"type":37,"value":1167},{"type":32,"tag":87,"props":1839,"children":1840},{"style":188},[1841],{"type":37,"value":1842}," ecommerce",{"type":32,"tag":87,"props":1844,"children":1845},{"style":145},[1846],{"type":37,"value":215},{"type":32,"tag":87,"props":1848,"children":1849},{"style":188},[1850],{"type":37,"value":1851},"transaction_id",{"type":32,"tag":87,"props":1853,"children":1854},{"style":104},[1855],{"type":37,"value":1194},{"type":32,"tag":87,"props":1857,"children":1858},{"style":145},[1859],{"type":37,"value":1860},") ",{"type":32,"tag":87,"props":1862,"children":1863},{"style":104},[1864],{"type":37,"value":153},{"type":32,"tag":87,"props":1866,"children":1867},{"style":145},[1868],{"type":37,"value":1869}," purchase_count,\n",{"type":32,"tag":87,"props":1871,"children":1872},{"class":89,"line":246},[1873,1878,1882,1886,1890,1895,1899,1903,1907],{"type":32,"tag":87,"props":1874,"children":1875},{"style":145},[1876],{"type":37,"value":1877},"  APPROX_TOP_COUNT(",{"type":32,"tag":87,"props":1879,"children":1880},{"style":188},[1881],{"type":37,"value":924},{"type":32,"tag":87,"props":1883,"children":1884},{"style":145},[1885],{"type":37,"value":215},{"type":32,"tag":87,"props":1887,"children":1888},{"style":188},[1889],{"type":37,"value":933},{"type":32,"tag":87,"props":1891,"children":1892},{"style":145},[1893],{"type":37,"value":1894},".item_category, ",{"type":32,"tag":87,"props":1896,"children":1897},{"style":188},[1898],{"type":37,"value":1022},{"type":32,"tag":87,"props":1900,"children":1901},{"style":145},[1902],{"type":37,"value":1860},{"type":32,"tag":87,"props":1904,"children":1905},{"style":104},[1906],{"type":37,"value":153},{"type":32,"tag":87,"props":1908,"children":1909},{"style":145},[1910],{"type":37,"value":1911}," top_categories,\n",{"type":32,"tag":87,"props":1913,"children":1914},{"class":89,"line":26},[1915,1920,1924,1928,1932,1937,1941,1945],{"type":32,"tag":87,"props":1916,"children":1917},{"style":188},[1918],{"type":37,"value":1919},"  AVG",{"type":32,"tag":87,"props":1921,"children":1922},{"style":145},[1923],{"type":37,"value":196},{"type":32,"tag":87,"props":1925,"children":1926},{"style":188},[1927],{"type":37,"value":924},{"type":32,"tag":87,"props":1929,"children":1930},{"style":145},[1931],{"type":37,"value":215},{"type":32,"tag":87,"props":1933,"children":1934},{"style":188},[1935],{"type":37,"value":1936},"purchase_revenue_in_usd",{"type":32,"tag":87,"props":1938,"children":1939},{"style":145},[1940],{"type":37,"value":1860},{"type":32,"tag":87,"props":1942,"children":1943},{"style":104},[1944],{"type":37,"value":153},{"type":32,"tag":87,"props":1946,"children":1947},{"style":145},[1948],{"type":37,"value":1949}," avg_basket_value\n",{"type":32,"tag":87,"props":1951,"children":1952},{"class":89,"line":294},[1953,1957],{"type":32,"tag":87,"props":1954,"children":1955},{"style":104},[1956],{"type":37,"value":470},{"type":32,"tag":87,"props":1958,"children":1959},{"style":125},[1960],{"type":37,"value":257},{"type":32,"tag":87,"props":1962,"children":1963},{"class":89,"line":303},[1964,1968,1973],{"type":32,"tag":87,"props":1965,"children":1966},{"style":104},[1967],{"type":37,"value":1547},{"type":32,"tag":87,"props":1969,"children":1970},{"style":145},[1971],{"type":37,"value":1972}," device_id ",{"type":32,"tag":87,"props":1974,"children":1975},{"style":104},[1976],{"type":37,"value":1977},"IS NOT NULL\n",{"type":32,"tag":87,"props":1979,"children":1980},{"class":89,"line":320},[1981,1986],{"type":32,"tag":87,"props":1982,"children":1983},{"style":104},[1984],{"type":37,"value":1985},"GROUP BY",{"type":32,"tag":87,"props":1987,"children":1988},{"style":145},[1989],{"type":37,"value":1990}," device_id, hour_of_day;\n",{"type":32,"tag":33,"props":1992,"children":1993},{},[1994,1996,2002,2003,2009],{"type":37,"value":1995},"После кластеризации каждый device_id получает виртуальные ID типа ",{"type":32,"tag":60,"props":1997,"children":1999},{"className":1998},[],[2000],{"type":37,"value":2001},"household_user_1",{"type":37,"value":621},{"type":32,"tag":60,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":37,"value":2008},"household_user_2",{"type":37,"value":2010},". Эти ID не sync в CRM — используются только в analytics и personalization layer.",{"type":32,"tag":33,"props":2012,"children":2013},{},[2014],{"type":37,"value":2015},"Точность household resolution низкая — ошибка в 30% нормальна. Поэтому за пределами e-commerce (особенно SaaS, fintech) не применяется.",{"type":32,"tag":40,"props":2017,"children":2019},{"id":2018},"структура-identity-graph-и-обновление",[2020],{"type":37,"value":2021},"Структура Identity Graph и Обновление",{"type":32,"tag":33,"props":2023,"children":2024},{},[2025,2027,2032],{"type":37,"value":2026},"Все результаты matching объединяются в один ",{"type":32,"tag":52,"props":2028,"children":2029},{},[2030],{"type":37,"value":2031},"identity graph table",{"type":37,"value":2033},". Эта таблица для каждого user_id хранит все известные aliases: email hash, CRM ID, ga_client_id, Firebase ID, advertising ID.",{"type":32,"tag":636,"props":2035,"children":2036},{},[2037,2073],{"type":32,"tag":640,"props":2038,"children":2039},{},[2040],{"type":32,"tag":644,"props":2041,"children":2042},{},[2043,2048,2053,2058,2063,2068],{"type":32,"tag":648,"props":2044,"children":2045},{},[2046],{"type":37,"value":2047},"canonical_id",{"type":32,"tag":648,"props":2049,"children":2050},{},[2051],{"type":37,"value":2052},"identifier_type",{"type":32,"tag":648,"props":2054,"children":2055},{},[2056],{"type":37,"value":2057},"identifier_value",{"type":32,"tag":648,"props":2059,"children":2060},{},[2061],{"type":37,"value":2062},"match_method",{"type":32,"tag":648,"props":2064,"children":2065},{},[2066],{"type":37,"value":2067},"confidence",{"type":32,"tag":648,"props":2069,"children":2070},{},[2071],{"type":37,"value":2072},"updated_at",{"type":32,"tag":664,"props":2074,"children":2075},{},[2076,2108,2137,2168],{"type":32,"tag":644,"props":2077,"children":2078},{},[2079,2084,2088,2093,2098,2103],{"type":32,"tag":671,"props":2080,"children":2081},{},[2082],{"type":37,"value":2083},"user_0001",{"type":32,"tag":671,"props":2085,"children":2086},{},[2087],{"type":37,"value":512},{"type":32,"tag":671,"props":2089,"children":2090},{},[2091],{"type":37,"value":2092},"a1b2c3...",{"type":32,"tag":671,"props":2094,"children":2095},{},[2096],{"type":37,"value":2097},"deterministic",{"type":32,"tag":671,"props":2099,"children":2100},{},[2101],{"type":37,"value":2102},"1.0",{"type":32,"tag":671,"props":2104,"children":2105},{},[2106],{"type":37,"value":2107},"2026-06-15",{"type":32,"tag":644,"props":2109,"children":2110},{},[2111,2115,2119,2124,2128,2132],{"type":32,"tag":671,"props":2112,"children":2113},{},[2114],{"type":37,"value":2083},{"type":32,"tag":671,"props":2116,"children":2117},{},[2118],{"type":37,"value":73},{"type":32,"tag":671,"props":2120,"children":2121},{},[2122],{"type":37,"value":2123},"GA1.2.123",{"type":32,"tag":671,"props":2125,"children":2126},{},[2127],{"type":37,"value":2097},{"type":32,"tag":671,"props":2129,"children":2130},{},[2131],{"type":37,"value":2102},{"type":32,"tag":671,"props":2133,"children":2134},{},[2135],{"type":37,"value":2136},"2026-06-14",{"type":32,"tag":644,"props":2138,"children":2139},{},[2140,2144,2149,2154,2159,2164],{"type":32,"tag":671,"props":2141,"children":2142},{},[2143],{"type":37,"value":2083},{"type":32,"tag":671,"props":2145,"children":2146},{},[2147],{"type":37,"value":2148},"firebase_id",{"type":32,"tag":671,"props":2150,"children":2151},{},[2152],{"type":37,"value":2153},"xyz789",{"type":32,"tag":671,"props":2155,"children":2156},{},[2157],{"type":37,"value":2158},"probabilistic",{"type":32,"tag":671,"props":2160,"children":2161},{},[2162],{"type":37,"value":2163},"0.75",{"type":32,"tag":671,"props":2165,"children":2166},{},[2167],{"type":37,"value":19},{"type":32,"tag":644,"props":2169,"children":2170},{},[2171,2176,2180,2185,2189,2193],{"type":32,"tag":671,"props":2172,"children":2173},{},[2174],{"type":37,"value":2175},"user_0002",{"type":32,"tag":671,"props":2177,"children":2178},{},[2179],{"type":37,"value":440},{"type":32,"tag":671,"props":2181,"children":2182},{},[2183],{"type":37,"value":2184},"CRM-456",{"type":32,"tag":671,"props":2186,"children":2187},{},[2188],{"type":37,"value":2097},{"type":32,"tag":671,"props":2190,"children":2191},{},[2192],{"type":37,"value":2102},{"type":32,"tag":671,"props":2194,"children":2195},{},[2196],{"type":37,"value":2197},"2026-06-10",{"type":32,"tag":33,"props":2199,"children":2200},{},[2201],{"type":37,"value":2202},"Graph обновляется инкрементально — каждый день сканируются новые события, добавляются новые совпадения. Старые links ослабляют через confidence decay: probabilistic link из 90 дней назад падает с 0.75 до 0.50.",{"type":32,"tag":33,"props":2204,"children":2205},{},[2206,2208,2213],{"type":37,"value":2207},"Если вы моделируете graph как ",{"type":32,"tag":52,"props":2209,"children":2210},{},[2211],{"type":37,"value":2212},"directed acyclic graph (DAG)",{"type":37,"value":2214},", можете обнаружить циклы. Цикл User A → User B → User C → User A — признак ошибки данных, требует ручного review.",{"type":32,"tag":40,"props":2216,"children":2218},{"id":2217},"интеграция-cdp-и-activation-pipeline",[2219],{"type":37,"value":2220},"Интеграция CDP и Activation Pipeline",{"type":32,"tag":33,"props":2222,"children":2223},{},[2224,2226,2234],{"type":37,"value":2225},"Identity graph не используется изолированно — подаётся в CDP. Архитектура ",{"type":32,"tag":571,"props":2227,"children":2231},{"href":2228,"rel":2229},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Fretention-engineering-cdp",[2230],"nofollow",[2232],{"type":37,"value":2233},"CDP & Retention Engineering",{"type":37,"value":2235}," берёт canonical_id из graph, объединяет все touch point под этим ID, отправляет в segment engine.",{"type":32,"tag":33,"props":2237,"children":2238},{},[2239],{"type":37,"value":2240},"Процесс activation работает так:",{"type":32,"tag":2242,"props":2243,"children":2244},"ol",{},[2245,2256,2266,2276],{"type":32,"tag":2246,"props":2247,"children":2248},"li",{},[2249,2254],{"type":32,"tag":52,"props":2250,"children":2251},{},[2252],{"type":37,"value":2253},"Segment definition:",{"type":37,"value":2255}," \"За последние 30 дней 3+ session, добавил в корзину, но не купил\" → определяется как BigQuery view.",{"type":32,"tag":2246,"props":2257,"children":2258},{},[2259,2264],{"type":32,"tag":52,"props":2260,"children":2261},{},[2262],{"type":37,"value":2263},"Identity resolution:",{"type":37,"value":2265}," View для каждого user_pseudo_id выполняет lookup canonical_id.",{"type":32,"tag":2246,"props":2267,"children":2268},{},[2269,2274],{"type":32,"tag":52,"props":2270,"children":2271},{},[2272],{"type":37,"value":2273},"Channel sync:",{"type":37,"value":2275}," Все email hash под canonical_id push в Meta CAPI, phone hash в Google Customer Match.",{"type":32,"tag":2246,"props":2277,"children":2278},{},[2279,2284],{"type":32,"tag":52,"props":2280,"children":2281},{},[2282],{"type":37,"value":2283},"Attribution:",{"type":37,"value":2285}," При поступлении conversion event canonical_id trace все touch point через graph.",{"type":32,"tag":33,"props":2287,"children":2288},{},[2289],{"type":37,"value":2290},"Без CDP identity resolution остаётся неполным — graph только говорит \"кто с кем связан\", не определяет \"что делать с этим пользователем\".",{"type":32,"tag":40,"props":2292,"children":2294},{"id":2293},"privacy-compliance-и-consent-propagation",[2295],{"type":37,"value":2296},"Privacy Compliance и Consent Propagation",{"type":32,"tag":33,"props":2298,"children":2299},{},[2300],{"type":37,"value":2301},"Identity resolution обосновывается через GDPR Article 6(1)(f) \"legitimate interest\" — но если пользователь явно не согласился, ID из этого graph нельзя использовать для retargeting. Интеграция с Consent Management Platform (CMP) обязательна.",{"type":32,"tag":33,"props":2303,"children":2304},{},[2305,2307,2313],{"type":37,"value":2306},"Для каждого canonical_id хранится статус согласия: ",{"type":32,"tag":60,"props":2308,"children":2310},{"className":2309},[],[2311],{"type":37,"value":2312},"{ analytics: true, marketing: false, personalization: true }",{"type":37,"value":2314},". ID, производные от graph, наследуют этот флаг — если User A имеет marketing=false, то ga_client_id User B, вероятностно связанный с User A, также не попадает в marketing segments.",{"type":32,"tag":33,"props":2316,"children":2317},{},[2318,2320,2327],{"type":37,"value":2319},"При TCF 2.2 vendor consent propagation сложнее: пользователи дали согласие Meta, но не Google, для них graph selective sync. Эта архитектура часть процесса ",{"type":32,"tag":571,"props":2321,"children":2324},{"href":2322,"rel":2323},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Ffirstparty",[2230],[2325],{"type":37,"value":2326},"First-Party Veri & Ölçüm Mimarisi",{"type":37,"value":2328}," — consent signal injekt в event pipeline с самого начала, graph update job читает эти signal.",{"type":32,"tag":2330,"props":2331,"children":2332},"hr",{},[],{"type":32,"tag":33,"props":2334,"children":2335},{},[2336],{"type":37,"value":2337},"Identity resolution — не просто JOIN операция, а критический слой, связывающий маркетинговые данные с механизмом принятия решений. Hash matching для достоверных совпадений, probabilistic scoring для слабых сигналов, household clustering для device sharing — все требует инженерной точности. Поддержание графика в актуальном состоянии, согласование с consent propagation, питание CDP activation pipeline — production-сторона этой дисциплины. В era без cookies идентификация клиента не предполагается — конструируется из шести разных идентификаторов.",{"type":32,"tag":2339,"props":2340,"children":2341},"style",{},[2342],{"type":37,"value":2343},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":136,"depth":136,"links":2345},[2346,2349,2350,2351,2352,2353],{"id":42,"depth":100,"text":45,"children":2347},[2348],{"id":595,"depth":136,"text":598},{"id":606,"depth":100,"text":609},{"id":1676,"depth":100,"text":1679},{"id":2018,"depth":100,"text":2021},{"id":2217,"depth":100,"text":2220},{"id":2293,"depth":100,"text":2296},"markdown","content:ru:data:identity-resolution-odnoidentifikator.md","content","ru\u002Fdata\u002Fidentity-resolution-odnoidentifikator.md","ru\u002Fdata\u002Fidentity-resolution-odnoidentifikator","md",1782079494911]