[{"data":1,"prerenderedAt":2360},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Fdata\u002Fresolucion-de-identidad":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":8,"_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: De 6 Señales a una Identidad Única del Cliente","Hash matching, linking probabilístico y household identity para unificar señales dispersas de clientes en una sola identidad. Ingeniería con 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","La vida útil de las cookies cayó de 28 días promedio a 7 días. Un usuario comienza en una app móvil, realiza el pago en web de escritorio, regresa desde una campaña de email — cada punto de contacto genera un identifier diferente. El 40% de los datos de marketing quedan como eventos huérfanos: sin user_id, sin session_id, sin atribución de conversión. Identity resolution es la operación de ingeniería que ensambla estas piezas con disciplina: hash matching en lugar de conjeturas, gráfos probabilísticos en lugar de razonamientos, clustering de hogares en lugar de suposiciones.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"matching-determinístico-unificación-basada-en-hash",[44],{"type":37,"value":45},"Matching Determinístico: Unificación Basada en Hash",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,57,59,66,68,74],{"type":37,"value":50},"El matching determinístico funciona cuando ",{"type":32,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":37,"value":56},"sabes con certeza",{"type":37,"value":58}," que dos puntos de datos comparten el mismo identifier. Hash SHA-256 del email, hash del número telefónico, ID de CRM. Si en tu tabla de eventos de BigQuery tienes ",{"type":32,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":37,"value":65},"user_id",{"type":37,"value":67}," pero en Google Analytics tienes ",{"type":32,"tag":60,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"ga_client_id",{"type":37,"value":75},", no puedes hacer JOIN directo — primero necesitas encontrar un evento de puente donde ambos estén registrados y crear una tabla de mapeo.",{"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","-- Ejemplo de stitching de identidad determinístico\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},"-- Ejemplo de stitching de identidad determinístico\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},"Esta query conecta el ",{"type":32,"tag":60,"props":542,"children":544},{"className":543},[],[545],{"type":37,"value":417},{"type":37,"value":547}," que viene de Firebase Analytics con el ",{"type":32,"tag":60,"props":549,"children":551},{"className":550},[],[552],{"type":37,"value":440},{"type":37,"value":554}," del CRM mediante ",{"type":32,"tag":52,"props":556,"children":557},{},[558],{"type":37,"value":559},"matching exacto",{"type":37,"value":561}," sobre hash de email. El hash del email actúa como identifier ancla. Detalle crítico: ",{"type":32,"tag":60,"props":563,"children":565},{"className":564},[],[566],{"type":37,"value":567},"LOWER(TRIM())",{"type":37,"value":569}," — si el usuario escribió \"",{"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},"\" pero en CRM está \"",{"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},"\", el hash se rompe. Por eso la normalización es el primer paso del pipeline.",{"type":32,"tag":33,"props":588,"children":589},{},[590],{"type":37,"value":591},"El matching determinístico tiene precisión del 100%, pero recall bajo — solo encuentra registros donde ambos sistemas comparten el mismo identifier. Si un usuario salió del web sin proporcionar email, no entra en este gráfo.",{"type":32,"tag":593,"props":594,"children":596},"h3",{"id":595},"colisión-de-hash-y-privacidad",[597],{"type":37,"value":598},"Colisión de Hash y Privacidad",{"type":32,"tag":33,"props":600,"children":601},{},[602],{"type":37,"value":603},"La probabilidad de colisión SHA-256 es teóricamente 2^-256 — en uso práctico, cero. Sin embargo, GDPR Artículo 32 no equipara hash con \"pseudonimización\"; un hash por sí solo no es anonimización. La combinación de hash de email + IP + timestamp permite re-identificar al usuario. Por eso las tablas de hash deben protegerse con encryption-at-rest + control de acceso a nivel de columna.",{"type":32,"tag":40,"props":605,"children":607},{"id":606},"linking-probabilístico-matching-basado-en-gráfos",[608],{"type":37,"value":609},"Linking Probabilístico: Matching Basado en Gráfos",{"type":32,"tag":33,"props":611,"children":612},{},[613,615,620,622,627,628,633],{"type":37,"value":614},"Cuando el join determinístico falla, entra en juego el matching probabilístico. Conectas dos registros con diferentes identifier mediante ",{"type":32,"tag":52,"props":616,"children":617},{},[618],{"type":37,"value":619},"similitud de comportamiento",{"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}," y otras weak signals. No es un modelo de machine learning — un sistema de puntuación ponderada + threshold es suficiente.",{"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},"Signal",{"type":32,"tag":648,"props":654,"children":655},{},[656],{"type":37,"value":657},"Peso",{"type":32,"tag":648,"props":659,"children":660},{},[661],{"type":37,"value":662},"Ejemplo",{"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},"Misma IP (dentro de 24 horas)",{"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},"Mismo 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},"Misma ubicación geográfica",{"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},"Estambul, 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},"Mismo clic de campaña",{"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},"Misma secuencia de visualización de producto",{"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},"producto_123 → producto_456",{"type":32,"tag":33,"props":759,"children":760},{},[761,763,768],{"type":37,"value":762},"Si la puntuación total ≥ 0.7, dos sesiones ",{"type":32,"tag":52,"props":764,"children":765},{},[766],{"type":37,"value":767},"probablemente",{"type":37,"value":769}," pertenecen a la misma persona. Este threshold se ajusta según el dataset — en e-commerce 0.65 puede ser suficiente, en fintech necesitas 0.85.",{"type":32,"tag":77,"props":771,"children":773},{"className":79,"code":772,"language":81,"meta":16,"style":16},"-- Ejemplo de scoring probabilístico\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  -- optimización de 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},"-- Ejemplo de scoring probabilístico\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},"  -- optimización de 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},"Esta query compara ",{"type":32,"tag":52,"props":1663,"children":1664},{},[1665],{"type":37,"value":1666},"todos los pares de sesiones",{"type":37,"value":1668}," — complejidad N². Si tienes 1M sesiones, son 500 mil millones de comparaciones. En producción necesitas particionamiento: ventana de timestamp (7 días), filtro geográfico (misma ciudad), tipo de dispositivo (mobile-mobile).",{"type":32,"tag":33,"props":1670,"children":1671},{},[1672],{"type":37,"value":1673},"El false positive del linking probabilístico es 5-15%. Por eso en activación downstream (push de CDP, campañas de email) debes marcar estos ID's con un flag \"potential_duplicate\".",{"type":32,"tag":40,"props":1675,"children":1677},{"id":1676},"household-identity-mismo-dispositivo-usuarios-diferentes",[1678],{"type":37,"value":1679},"Household Identity: Mismo Dispositivo, Usuarios Diferentes",{"type":32,"tag":33,"props":1681,"children":1682},{},[1683],{"type":37,"value":1684},"Una tablet o Smart TV se usa entre varios miembros de la familia. El matching determinístico o probabilístico colapsa aquí — crea un único ID para perfiles diferentes dentro del hogar, lo que causa personalization incorrecta. Household identity resolution intenta distinguir estos escenarios.",{"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}," Usuarios que se loguean a diferentes horas en el mismo dispositivo tienen patrones de navegación distintos. Un usuario que busca ropa a las 08:00 es diferente de quien busca electrónica a las 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 o clustering jerárquico agrupa sesiones. Si los centroides son distintos, creas un \"virtual user\" separado bajo el mismo device_id.",{"type":32,"tag":77,"props":1706,"children":1708},{"className":79,"code":1707,"language":81,"meta":16,"style":16},"-- Extracción de features para clustering de hogares\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},"-- Extracción de features para clustering de hogares\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},"Tras el clustering, cada device_id genera virtual ID's como ",{"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},". Estos ID's no se sincronizan con CRM — solo se usan en analytics y personalization layer.",{"type":32,"tag":33,"props":2012,"children":2013},{},[2014],{"type":37,"value":2015},"La sensibilidad de household resolution es baja — 30% de error es normal. Por eso fuera de e-commerce (especialmente SaaS, fintech) no se aplica.",{"type":32,"tag":40,"props":2017,"children":2019},{"id":2018},"estructura-del-identity-graph-y-mantenimiento",[2020],{"type":37,"value":2021},"Estructura del Identity Graph y Mantenimiento",{"type":32,"tag":33,"props":2023,"children":2024},{},[2025,2027,2032],{"type":37,"value":2026},"Todos los resultados de matching se consolidan en una única tabla de ",{"type":32,"tag":52,"props":2028,"children":2029},{},[2030],{"type":37,"value":2031},"identity graph",{"type":37,"value":2033},". Esta tabla mantiene, para cada user_id, todos los alias conocidos: email hash, ID de CRM, 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},"El graph se actualiza incrementalmente — cada día se escanean nuevos eventos y se añaden nuevos matches. Los links antiguos decaen en confianza: un link probabilístico de 90 días reduce su confidence de 0.75 a 0.50.",{"type":32,"tag":33,"props":2204,"children":2205},{},[2206,2208,2213],{"type":37,"value":2207},"Si modeleas el graph como un ",{"type":32,"tag":52,"props":2209,"children":2210},{},[2211],{"type":37,"value":2212},"directed acyclic graph (DAG)",{"type":37,"value":2214},", puedes detectar loops. Un ciclo User A → User B → User C → User A es síntoma de error en datos — requiere revisión manual.",{"type":32,"tag":40,"props":2216,"children":2218},{"id":2217},"integración-con-cdp-y-pipeline-de-activación",[2219],{"type":37,"value":2220},"Integración con CDP y Pipeline de Activación",{"type":32,"tag":33,"props":2222,"children":2223},{},[2224,2226,2234],{"type":37,"value":2225},"El identity graph no funciona solo — se alimenta a un CDP. La arquitectura de ",{"type":32,"tag":571,"props":2227,"children":2231},{"href":2228,"rel":2229},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fretention-engineering-cdp",[2230],"nofollow",[2232],{"type":37,"value":2233},"CDP & Retention Engineering",{"type":37,"value":2235}," toma el canonical_id del graph, consolida todos los touch points bajo este ID y lo envía al segmentation engine.",{"type":32,"tag":33,"props":2237,"children":2238},{},[2239],{"type":37,"value":2240},"El proceso de activación funciona así:",{"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}," \"3+ sesiones en últimos 30 días, con agregación al carrito pero sin compra\" → se define como 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}," La view busca canonical_id para cada user_pseudo_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}," Todos los email hashes bajo canonical_id se envían a Meta CAPI; los phone hashes a 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}," Cuando llega un conversion event, se rastrea con canonical_id a través del graph para trazar todos los touch points.",{"type":32,"tag":33,"props":2287,"children":2288},{},[2289],{"type":37,"value":2290},"Sin CDP, identity resolution queda incompleta — el graph solo dice \"quién coincide con quién\", no \"qué acción tomar con este usuario\".",{"type":32,"tag":40,"props":2292,"children":2294},{"id":2293},"conformidad-de-privacidad-y-propagación-de-consentimiento",[2295],{"type":37,"value":2296},"Conformidad de Privacidad y Propagación de Consentimiento",{"type":32,"tag":33,"props":2298,"children":2299},{},[2300],{"type":37,"value":2301},"Identity resolution se justifica bajo GDPR Artículo 6(1)(f) \"interés legítimo\" — pero si el usuario no ha dado consentimiento explícito, los ID derivados de este graph no pueden usarse para remarketing. La integración con Consent Management Platform (CMP) es obligatoria.",{"type":32,"tag":33,"props":2303,"children":2304},{},[2305,2307,2313],{"type":37,"value":2306},"Cada canonical_id mantiene estado de consentimiento: ",{"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},". Los identifier derivados del graph heredan este flag — es decir, si el email_hash de User A tiene marketing=false, el ga_client_id de User A derivado del link probabilístico tampoco entra en segmentos de marketing.",{"type":32,"tag":33,"props":2316,"children":2317},{},[2318,2320,2327],{"type":37,"value":2319},"Bajo TCF 2.2, la propagación de vendor consent es más compleja: usuarios con consentimiento para Meta pero no para Google requieren sync selectivo del graph. Esta arquitectura es parte del proceso de ",{"type":32,"tag":571,"props":2321,"children":2324},{"href":2322,"rel":2323},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Ffirstparty",[2230],[2325],{"type":37,"value":2326},"First-Party Data & Arquitectura de Medición",{"type":37,"value":2328}," — las señales de consentimiento se inyectan al inicio del pipeline de eventos, y los jobs de actualización del graph las procesan.",{"type":32,"tag":2330,"props":2331,"children":2332},"hr",{},[],{"type":32,"tag":33,"props":2334,"children":2335},{},[2336],{"type":37,"value":2337},"Identity resolution no es solo una operación JOIN técnica — es la capa crítica que conecta datos de marketing con mecanismos de decisión. Resolver matching exacto con hash, weak signals con scoring probabilístico, compartición de dispositivos con clustering de hogares requiere precisión en ingeniería. Mantener el graph actualizado, alinearlo con propagación de consentimiento, alimentarlo al pipeline de activación de CDP es la cara de producción de esta disciplina. En la era sin cookies, la identidad del cliente no se adivina — se construye a partir de seis identifier diferentes unificados.",{"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:es:data:resolucion-de-identidad.md","content","es\u002Fdata\u002Fresolucion-de-identidad.md","es\u002Fdata\u002Fresolucion-de-identidad","md",1782079490382]