{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"redocly_category":"Products","product_name":"Real-time","type":"markdown"},"seo":{"title":"Lookup Catalog Sync Workflow","description":"Learn how to configure and run the Treasure Workflow sync workflow that uploads cdp_lookup_catalog table data to RT 2.0 internal storage for use in RT 2.0 personalization.","siteUrl":"https://docs.treasure.ai","lang":"en-US","jsonLd":{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.treasure.ai/","name":"Treasure AI","url":"https://www.treasure.ai/","logo":"https://www.treasure.ai/hubfs/assets/images/logos/primary-logo.svg"},{"@type":"WebSite","@id":"https://docs.treasure.ai/#website","name":"Treasure AI Documentation","url":"https://docs.treasure.ai/","inLanguage":["en","ja"],"publisher":{"@id":"https://www.treasure.ai/"}}]},"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"lookup-catalog-sync-workflow","__idx":0},"children":["Lookup Catalog Sync Workflow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Lookup Catalog sync workflow reads from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cdp_lookup_catalog"]}," database in Data Workbench, detects changed records using hash-based change tracking, and uploads only modified rows to RT 2.0's internal storage via the Bulk Load API."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Workflow files on GitHub"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The latest workflow files are available in the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/treasure-data/treasure-boxes/tree/master/realtime-box/lookup-catalog-sync"},"children":["treasure-data/treasure-boxes"]}," repository under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["realtime-box/lookup-catalog-sync/"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lookup_catalog_sync.dig"]}," — main workflow"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scripts.py"]}," — generates type-aware JSON payload SQL per table"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["queries/discover_tables.sql"]}," — discovers eligible tables in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cdp_lookup_catalog"]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The workflow automatically discovers all eligible tables in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cdp_lookup_catalog"]}," on each run — there is no separate configuration step per table. An optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p_table_name"]}," parameter can restrict a single run to one table, which is useful for testing."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-it-works","__idx":1},"children":["How It Works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The workflow follows the same per-table sync pipeline for every discovered table:"]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"flowchart TD\n    A[Discover tables] --> B[For each table]\n    B --> C[Extract changed records\\nvia hash comparison]\n    C --> D{Changes exist?}\n    D -->|Yes| E[Upload to RT 2.0\\nInternal Storage]\n    D -->|No| F[Skip — no update]\n    E --> G[Update digest table]\n    G --> H[Cleanup temp tables]\n","diagramHtml":"<svg id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 456.4609375px;\" viewBox=\"0 0 456.4609375 875.40625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883{font-family:\"Redocly Mermaid Sans\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .error-icon{fill:#552222;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .error-text{fill:#552222;stroke:#552222;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-thickness-normal{stroke-width:1px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-thickness-thick{stroke-width:3.5px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-pattern-solid{stroke-dasharray:0;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .marker{fill:#333333;stroke:#333333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .marker.cross{stroke:#333333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 svg{font-family:\"Redocly Mermaid Sans\",sans-serif;font-size:16px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 p{margin:0;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .label{font-family:\"Redocly Mermaid Sans\",sans-serif;color:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .cluster-label text{fill:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .cluster-label span{color:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .cluster-label span p{background-color:transparent;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .label text,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 span{fill:#333;color:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node rect,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node circle,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node ellipse,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node polygon,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .rough-node .label text,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node .label text,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .image-shape .label,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .icon-shape .label{text-anchor:middle;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .rough-node .label,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node .label,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .image-shape .label,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .icon-shape .label{text-align:center;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node.clickable{cursor:pointer;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .arrowheadPath{fill:#333333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edgePath .path{stroke:#333333;stroke-width:1px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .flowchart-link{stroke:#333333;fill:none;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .cluster text{fill:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .cluster span{color:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 rect.text{fill:none;stroke-width:0;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .icon-shape,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .icon-shape p,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .icon-shape .label rect,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 .node .neo-node{stroke:#9370DB;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node rect,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].cluster rect,#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",sans-serif;}#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",sans-serif;}</style><g><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M233.77,62L233.77,66.167C233.77,70.333,233.77,78.667,233.77,86.333C233.77,94,233.77,101,233.77,104.5L233.77,108\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjMzLjc2OTUzMTI1LCJ5Ijo2Mn0seyJ4IjoyMzMuNzY5NTMxMjUsInkiOjg3fSx7IngiOjIzMy43Njk1MzEyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path><path d=\"M233.77,166L233.77,170.167C233.77,174.333,233.77,182.667,233.77,190.333C233.77,198,233.77,205,233.77,208.5L233.77,212\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MjMzLjc2OTUzMTI1LCJ5IjoxNjZ9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjoxOTF9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path><path d=\"M233.77,294L233.77,298.167C233.77,302.333,233.77,310.667,233.77,318.333C233.77,326,233.77,333,233.77,336.5L233.77,340\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjMzLjc2OTUzMTI1LCJ5IjoyOTR9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjozMTl9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjozNDR9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path><path d=\"M192.915,466.551L179.937,479.527C166.959,492.503,141.003,518.455,128.025,536.93C115.047,555.406,115.047,566.406,115.047,571.906L115.047,577.406\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_D_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTkyLjkxNDYwODE5NjMzMTkzLCJ5Ijo0NjYuNTUxMzI2OTQ2MzMxOX0seyJ4IjoxMTUuMDQ2ODc1LCJ5Ijo1NDQuNDA2MjV9LHsieCI6MTE1LjA0Njg3NSwieSI6NTgxLjQwNjI1fV0=\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path><path d=\"M274.624,466.551L287.602,479.527C300.58,492.503,326.536,518.455,339.514,538.93C352.492,559.406,352.492,574.406,352.492,581.906L352.492,589.406\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_D_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_F_0\" data-points=\"W3sieCI6Mjc0LjYyNDQ1NDMwMzY2ODEsInkiOjQ2Ni41NTEzMjY5NDYzMzE5fSx7IngiOjM1Mi40OTIxODc1LCJ5Ijo1NDQuNDA2MjV9LHsieCI6MzUyLjQ5MjE4NzUsInkiOjU5My40MDYyNX1d\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path><path d=\"M115.047,659.406L115.047,663.573C115.047,667.74,115.047,676.073,115.047,683.74C115.047,691.406,115.047,698.406,115.047,701.906L115.047,705.406\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_E_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G_0\" data-points=\"W3sieCI6MTE1LjA0Njg3NSwieSI6NjU5LjQwNjI1fSx7IngiOjExNS4wNDY4NzUsInkiOjY4NC40MDYyNX0seyJ4IjoxMTUuMDQ2ODc1LCJ5Ijo3MDkuNDA2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path><path d=\"M115.047,763.406L115.047,767.573C115.047,771.74,115.047,780.073,115.047,787.74C115.047,795.406,115.047,802.406,115.047,805.906L115.047,809.406\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-L_G_H_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_H_0\" data-points=\"W3sieCI6MTE1LjA0Njg3NSwieSI6NzYzLjQwNjI1fSx7IngiOjExNS4wNDY4NzUsInkiOjc4OC40MDYyNX0seyJ4IjoxMTUuMDQ2ODc1LCJ5Ijo4MTMuNDA2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(115.046875, 544.40625)\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(-12.390625, -12)\"><foreignObject width=\"24.78125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(352.4921875, 544.40625)\"><g class=\"label\" data-id=\"L_D_F_0\" transform=\"translate(-10.8671875, -12)\"><foreignObject width=\"21.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_H_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-A-0\" data-look=\"classic\" transform=\"translate(233.76953125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.5\" y=\"-27\" width=\"173\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.5, -12)\"><rect></rect><foreignObject width=\"113\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Discover tables</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-B-1\" data-look=\"classic\" transform=\"translate(233.76953125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.7265625\" y=\"-27\" width=\"165.453125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.7265625, -12)\"><rect></rect><foreignObject width=\"105.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>For each table</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-C-3\" data-look=\"classic\" transform=\"translate(233.76953125, 255)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.71875\" y=\"-39\" width=\"239.4375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.71875, -24)\"><rect></rect><foreignObject width=\"179.4375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Extract changed records<br>via hash comparison</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-D-5\" data-look=\"classic\" transform=\"translate(233.76953125, 425.703125)\"><polygon points=\"81.703125,0 163.40625,-81.703125 81.703125,-163.40625 0,-81.703125\" class=\"label-container\" transform=\"translate(-81.203125, 81.703125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Changes exist?</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-E-7\" data-look=\"classic\" transform=\"translate(115.046875, 620.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.4765625\" y=\"-39\" width=\"182.953125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.4765625, -24)\"><rect></rect><foreignObject width=\"122.953125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Upload to RT 2.0<br>Internal Storage</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-F-9\" data-look=\"classic\" transform=\"translate(352.4921875, 620.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.96875\" y=\"-27\" width=\"191.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.96875, -12)\"><rect></rect><foreignObject width=\"131.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Skip — no update</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-G-11\" data-look=\"classic\" transform=\"translate(115.046875, 736.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.671875\" y=\"-27\" width=\"205.34375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.671875, -12)\"><rect></rect><foreignObject width=\"145.34375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Update digest table</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-flowchart-H-13\" data-look=\"classic\" transform=\"translate(115.046875, 840.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.046875\" y=\"-27\" width=\"214.09375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.046875, -12)\"><rect></rect><foreignObject width=\"154.09375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Cleanup temp tables</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"diagram-6e33591124830cef394ecddc624bd6790aaec6302af0a7c01bce205b7f3d1883-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg>","diagramHtmlDark":"<svg id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 456.4609375px;\" viewBox=\"0 0 456.4609375 875.40625\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6{font-family:\"Redocly Mermaid Sans\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .error-icon{fill:#a44141;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .error-text{fill:#ddd;stroke:#ddd;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-thickness-normal{stroke-width:1px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-thickness-thick{stroke-width:3.5px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-pattern-solid{stroke-dasharray:0;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .marker{fill:lightgrey;stroke:lightgrey;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .marker.cross{stroke:lightgrey;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 svg{font-family:\"Redocly Mermaid Sans\",sans-serif;font-size:16px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 p{margin:0;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .label{font-family:\"Redocly Mermaid Sans\",sans-serif;color:#ccc;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .cluster-label text{fill:#F9FFFE;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .cluster-label span{color:#F9FFFE;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .cluster-label span p{background-color:transparent;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .label text,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 span{fill:#ccc;color:#ccc;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node rect,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node circle,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node ellipse,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node polygon,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .rough-node .label text,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node .label text,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .image-shape .label,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .icon-shape .label{text-anchor:middle;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .rough-node .label,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node .label,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .image-shape .label,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .icon-shape .label{text-align:center;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node.clickable{cursor:pointer;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .arrowheadPath{fill:lightgrey;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edgePath .path{stroke:lightgrey;stroke-width:1px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .flowchart-link{stroke:lightgrey;fill:none;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .cluster text{fill:#F9FFFE;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .cluster span{color:#F9FFFE;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 rect.text{fill:none;stroke-width:0;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .icon-shape,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .icon-shape p,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .icon-shape .label rect,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 .node .neo-node{stroke:#ccc;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node rect,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].cluster rect,#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node polygon{stroke:url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node path{stroke:url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-gradient);stroke-width:1px;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node circle{stroke:url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",sans-serif;}#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",sans-serif;}</style><g><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M233.77,62L233.77,66.167C233.77,70.333,233.77,78.667,233.77,86.333C233.77,94,233.77,101,233.77,104.5L233.77,108\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_A_B_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_A_B_0\" data-points=\"W3sieCI6MjMzLjc2OTUzMTI1LCJ5Ijo2Mn0seyJ4IjoyMzMuNzY5NTMxMjUsInkiOjg3fSx7IngiOjIzMy43Njk1MzEyNSwieSI6MTEyfV0=\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path><path d=\"M233.77,166L233.77,170.167C233.77,174.333,233.77,182.667,233.77,190.333C233.77,198,233.77,205,233.77,208.5L233.77,212\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_B_C_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_B_C_0\" data-points=\"W3sieCI6MjMzLjc2OTUzMTI1LCJ5IjoxNjZ9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjoxOTF9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjoyMTZ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path><path d=\"M233.77,294L233.77,298.167C233.77,302.333,233.77,310.667,233.77,318.333C233.77,326,233.77,333,233.77,336.5L233.77,340\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_C_D_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_C_D_0\" data-points=\"W3sieCI6MjMzLjc2OTUzMTI1LCJ5IjoyOTR9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjozMTl9LHsieCI6MjMzLjc2OTUzMTI1LCJ5IjozNDR9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path><path d=\"M192.915,466.551L179.937,479.527C166.959,492.503,141.003,518.455,128.025,536.93C115.047,555.406,115.047,566.406,115.047,571.906L115.047,577.406\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_D_E_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_E_0\" data-points=\"W3sieCI6MTkyLjkxNDYwODE5NjMzMTkzLCJ5Ijo0NjYuNTUxMzI2OTQ2MzMxOX0seyJ4IjoxMTUuMDQ2ODc1LCJ5Ijo1NDQuNDA2MjV9LHsieCI6MTE1LjA0Njg3NSwieSI6NTgxLjQwNjI1fV0=\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path><path d=\"M274.624,466.551L287.602,479.527C300.58,492.503,326.536,518.455,339.514,538.93C352.492,559.406,352.492,574.406,352.492,581.906L352.492,589.406\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_D_F_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_D_F_0\" data-points=\"W3sieCI6Mjc0LjYyNDQ1NDMwMzY2ODEsInkiOjQ2Ni41NTEzMjY5NDYzMzE5fSx7IngiOjM1Mi40OTIxODc1LCJ5Ijo1NDQuNDA2MjV9LHsieCI6MzUyLjQ5MjE4NzUsInkiOjU5My40MDYyNX1d\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path><path d=\"M115.047,659.406L115.047,663.573C115.047,667.74,115.047,676.073,115.047,683.74C115.047,691.406,115.047,698.406,115.047,701.906L115.047,705.406\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_E_G_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_E_G_0\" data-points=\"W3sieCI6MTE1LjA0Njg3NSwieSI6NjU5LjQwNjI1fSx7IngiOjExNS4wNDY4NzUsInkiOjY4NC40MDYyNX0seyJ4IjoxMTUuMDQ2ODc1LCJ5Ijo3MDkuNDA2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path><path d=\"M115.047,763.406L115.047,767.573C115.047,771.74,115.047,780.073,115.047,787.74C115.047,795.406,115.047,802.406,115.047,805.906L115.047,809.406\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-L_G_H_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_G_H_0\" data-points=\"W3sieCI6MTE1LjA0Njg3NSwieSI6NzYzLjQwNjI1fSx7IngiOjExNS4wNDY4NzUsInkiOjc4OC40MDYyNX0seyJ4IjoxMTUuMDQ2ODc1LCJ5Ijo4MTMuNDA2MjV9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_A_B_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_B_C_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_C_D_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(115.046875, 544.40625)\"><g class=\"label\" data-id=\"L_D_E_0\" transform=\"translate(-12.390625, -12)\"><foreignObject width=\"24.78125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Yes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(352.4921875, 544.40625)\"><g class=\"label\" data-id=\"L_D_F_0\" transform=\"translate(-10.8671875, -12)\"><foreignObject width=\"21.734375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>No</p></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_E_G_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\"><g class=\"label\" data-id=\"L_G_H_0\" transform=\"translate(0, 0)\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-A-0\" data-look=\"classic\" transform=\"translate(233.76953125, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-86.5\" y=\"-27\" width=\"173\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-56.5, -12)\"><rect></rect><foreignObject width=\"113\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Discover tables</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-B-1\" data-look=\"classic\" transform=\"translate(233.76953125, 139)\"><rect class=\"basic label-container\" style=\"\" x=\"-82.7265625\" y=\"-27\" width=\"165.453125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-52.7265625, -12)\"><rect></rect><foreignObject width=\"105.453125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>For each table</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-C-3\" data-look=\"classic\" transform=\"translate(233.76953125, 255)\"><rect class=\"basic label-container\" style=\"\" x=\"-119.71875\" y=\"-39\" width=\"239.4375\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-89.71875, -24)\"><rect></rect><foreignObject width=\"179.4375\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Extract changed records<br>via hash comparison</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-D-5\" data-look=\"classic\" transform=\"translate(233.76953125, 425.703125)\"><polygon points=\"81.703125,0 163.40625,-81.703125 81.703125,-163.40625 0,-81.703125\" class=\"label-container\" transform=\"translate(-81.203125, 81.703125)\"></polygon><g class=\"label\" style=\"\" transform=\"translate(-54.703125, -12)\"><rect></rect><foreignObject width=\"109.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Changes exist?</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-E-7\" data-look=\"classic\" transform=\"translate(115.046875, 620.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-91.4765625\" y=\"-39\" width=\"182.953125\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-61.4765625, -24)\"><rect></rect><foreignObject width=\"122.953125\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Upload to RT 2.0<br>Internal Storage</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-F-9\" data-look=\"classic\" transform=\"translate(352.4921875, 620.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-95.96875\" y=\"-27\" width=\"191.9375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-65.96875, -12)\"><rect></rect><foreignObject width=\"131.9375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Skip — no update</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-G-11\" data-look=\"classic\" transform=\"translate(115.046875, 736.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-102.671875\" y=\"-27\" width=\"205.34375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-72.671875, -12)\"><rect></rect><foreignObject width=\"145.34375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Update digest table</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-flowchart-H-13\" data-look=\"classic\" transform=\"translate(115.046875, 840.40625)\"><rect class=\"basic label-container\" style=\"\" x=\"-107.046875\" y=\"-27\" width=\"214.09375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-77.046875, -12)\"><rect></rect><foreignObject width=\"154.09375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Cleanup temp tables</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><defs><filter id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><linearGradient id=\"diagram-9bf3893da92a453f2d8c33b2530404cc1815d84cde3f65af755c7b94064d1cb6-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#cccccc\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(180, 0%, 18.3529411765%)\" stop-opacity=\"1\"></stop></linearGradient></svg>"},"children":["flowchart TD\n    A[Discover tables] --> B[For each table]\n    B --> C[Extract changed records\\nvia hash comparison]\n    C --> D{Changes exist?}\n    D -->|Yes| E[Upload to RT 2.0\\nInternal Storage]\n    D -->|No| F[Skip — no update]\n    E --> G[Update digest table]\n    G --> H[Cleanup temp tables]\n"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Change detection"]},": Each table has a companion digest table (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_{table_name}_digests"]},") that stores a hash of each row's JSON payload. On each run, only rows whose hash has changed (or that are new) are uploaded."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Internal table naming"]},": All workflow-internal and temporary tables use a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_"]}," prefix to distinguish them from source tables. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["discover_tables.sql"]}," query automatically excludes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_*"]}," tables from sync."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"configuration-parameters","__idx":2},"children":["Configuration Parameters"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"30%","data-label":"Parameter"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Parameter"]}," "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"20%","data-label":"Default"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Default"]}," "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"50%","data-label":"Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Description"]}," "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_importer_endpoint"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["(required)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Region-specific Bulk Load API endpoint. See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#region-specific-endpoints"},"children":["region-specific endpoints"]}," table below."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_instance"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["(required)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Instance identifier provisioned by Treasure AI when RT 2.0 is set up for your account (format: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["a{accountId}n{instanceId}"]},"). Contact your Customer Success Manager or Treasure AI Support to obtain this value."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["td.database"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cdp_lookup_catalog"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Source database containing the lookup tables."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p_table_name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}," (all tables)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When set, syncs only the specified table. Leave empty to sync all discovered tables."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["batch_size"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1000"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Number of records per upload request to the Bulk Load API."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parallelism"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["10"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Number of concurrent upload threads per table."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"region-specific-endpoints","__idx":3},"children":["Region-Specific Endpoints"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"20%","data-label":"Region"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Region"]}," "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"80%","data-label":"reactor_importer_endpoint"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_importer_endpoint"]}]}," "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["US"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://bulk-storage-importer-api-production-aws-us-east-1.internal.treasuredata.com"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["EU (eu01)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://bulk-storage-importer-api-production-eu01-eu-central-1.internal.treasuredata.com"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tokyo"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://bulk-storage-importer-api-production-aws-tokyo-ap-northeast-1.internal.treasuredata.com"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Internal endpoint access"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".internal.treasuredata.com"]}," endpoints are only reachable from within the Treasure Data platform (for example, from a TD Workflow task) and cannot be accessed from the public internet."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"No instance-level data isolation"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_instance"]}," parameter routes the upload request but does not restrict which instances can read the data. All instances within the account share the same lookup catalog storage — any Lookup Catalog Attribute in any instance can read any table uploaded under the account, regardless of which ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_instance"]}," value was used to upload it. If your account operates multiple RT 2.0 instances that must not share catalog data, do not rely on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_instance"]}," for isolation; use separate accounts or contact Treasure AI Support."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"setting-up-the-workflow","__idx":4},"children":["Setting Up the Workflow"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In Data Workbench, create a new Workflow project (or use an existing one)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Copy the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lookup-catalog-sync/"]}," directory from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/treasure-data/treasure-boxes/tree/master/realtime-box/lookup-catalog-sync"},"children":["realtime-box/lookup-catalog-sync/"]}," in the treasure-boxes repository and upload the files (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lookup_catalog_sync.dig"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scripts.py"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["queries/discover_tables.sql"]},") into the project."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Edit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lookup_catalog_sync.dig"]}," and set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_importer_endpoint"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reactor_instance"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["td.database"]}," in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_export"]}," block. Optionally set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p_table_name"]}," to restrict a run to a single table for testing."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Store your TD API key in the project's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Secrets"]}," tab as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["td.apikey"]},". Use a key scoped to the minimum required permission (write access for the Bulk Load API) rather than a full-access key."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set a schedule (daily is recommended) and run the workflow manually once to verify the initial full upload succeeds."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The discovery query automatically finds all base tables in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cdp_lookup_catalog"]}," and excludes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_*"]}," internal tables."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Parallelism guidance"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Start with the default settings (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["batch_size: 1000"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parallelism: 10"]},") for the initial full upload. Increase gradually during incremental runs while monitoring for throttling errors. Larger tables or higher parallelism amplify the risk of throttling."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"scheduling-recommendations","__idx":5},"children":["Scheduling Recommendations"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"35%","data-label":"Data type"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data type"]}," "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"65%","data-label":"Recommended schedule"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Recommended schedule"]}," "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Flash sale / time-sensitive pricing"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Every 1–2 hours (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0 */1 * * *"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Daily promotions / coupon tables"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Every 6 hours (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0 */6 * * *"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Product catalog (stable data)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Daily (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0 2 * * *"]},")"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"troubleshooting","__idx":6},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"35%","data-label":"Symptom"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Symptom"]}," "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"65%","data-label":"Cause and fix"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Cause and fix"]}," "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All records upload on every run"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The digest table does not exist or has stale hashes. Drop ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_{table_name}_digests"]}," and re-run to rebuild from scratch."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["400 error: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"Expected string, received...\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A row has a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NULL"]}," or empty primary key. Filter out or fix null-key rows in the source table before the next run."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["400 error: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"Missing required header: x-lookup-table-name\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-lookup-table-name"]}," header is missing from the upload step. Verify the workflow template headers are configured correctly."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Workflow fails with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["varchar = bigint"]}," type error"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The source table column type was changed to an incompatible type (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["string"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["int"]},"). Drop the digest table, fix the source data, and re-run."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Schema mismatch after changing the primary key column"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Drop the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_{table_name}_digests"]}," table, then re-run. The workflow will re-upload all rows with the new key. Previously uploaded data under the old key is not automatically deleted."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Removed column still appears in responses"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["RT 2.0 stores data as uploaded — removing a column from the source table does not delete it from internal storage. A full re-upload is required to purge the residual data: drop the digest table (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_wf_{table_name}_digests"]},") and re-run the workflow. Until then, the deleted column's data remains accessible via the API."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Upload timeout"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Reduce ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parallelism"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["batch_size"]},", especially during the initial full upload of a large table."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"key-column-constraints","__idx":7},"children":["Key Column Constraints"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The workflow detects the primary key as the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["first non-",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["time"]}," column"]}," in the table schema (by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ordinal_position"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["information_schema.columns"]},") — if the table's first column is named ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["time"]},", the second column is used as the primary key instead."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"35%","data-label":"Constraint"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Constraint"]}," "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"65%","data-label":"Detail"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Detail"]}," "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Column position"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The key column must be the first non-",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["time"]}," column in the table schema."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Column name"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Must not be named ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["time"]}," (reserved by Treasure AI platform)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Null values"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Key column must not contain ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NULL"]}," or empty values. Upload fails with 400 if null keys are present."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Supported types"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["string"]},". Other types are not supported for the primary key column."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Uniqueness"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Data must be deduplicated. The workflow does not deduplicate rows."]}]}]}]}]}]},"headings":[{"value":"Lookup Catalog Sync Workflow","id":"lookup-catalog-sync-workflow","depth":1},{"value":"How It Works","id":"how-it-works","depth":2},{"value":"Configuration Parameters","id":"configuration-parameters","depth":2},{"value":"Region-Specific Endpoints","id":"region-specific-endpoints","depth":3},{"value":"Setting Up the Workflow","id":"setting-up-the-workflow","depth":2},{"value":"Scheduling Recommendations","id":"scheduling-recommendations","depth":2},{"value":"Troubleshooting","id":"troubleshooting","depth":2},{"value":"Key Column Constraints","id":"key-column-constraints","depth":2}],"frontmatter":{"seo":{"title":"Lookup Catalog Sync Workflow","description":"Learn how to configure and run the Treasure Workflow sync workflow that uploads cdp_lookup_catalog table data to RT 2.0 internal storage for use in RT 2.0 personalization."}},"lastModified":"2026-07-10T23:37:04.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/customer-data-platform/real-time/lookup-catalog-workflow","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}