[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-explore-omni-omni-to-databricks-metric-view":3,"mdc-e8nz0z-key":37,"related-org-explore-omni-omni-to-databricks-metric-view":4183,"related-repo-explore-omni-omni-to-databricks-metric-view":4333},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"omni-to-databricks-metric-view","convert Omni topics to Databricks Metric Views","Convert an Omni Analytics topic into a Databricks Metric View definition in Unity Catalog. Use this skill whenever someone wants to export Omni metrics to Databricks, create a Metric View from an Omni topic, harden BI metrics into Unity Catalog, or bridge Omni's semantic layer with Databricks AI\u002FBI dashboards and Genie spaces.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"explore-omni","Explore Omni","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fexplore-omni.png","exploreomni",[13,17,20,23],{"name":14,"slug":15,"type":16},"Data Engineering","data-engineering","tag",{"name":18,"slug":19,"type":16},"Omni","omni",{"name":21,"slug":22,"type":16},"Databricks","databricks",{"name":24,"slug":25,"type":16},"Analytics","analytics",27,"https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fomni-agent-skills","2026-04-09T04:47:50.695014",null,3,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"A collection of skill for working with Omni. These skills help AI agents understand and execute Omni workflows more effectively.","https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fomni-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fomni-integrations\u002Fskills\u002Fomni-to-databricks-metric-views","---\nname: omni-to-databricks-metric-view\ndescription: \"Convert an Omni Analytics topic into a Databricks Metric View definition in Unity Catalog. Use this skill whenever someone wants to export Omni metrics to Databricks, create a Metric View from an Omni topic, harden BI metrics into Unity Catalog, or bridge Omni's semantic layer with Databricks AI\u002FBI dashboards and Genie spaces.\"\n---\n\n# Omni → Databricks Metric View\n\nConverts an Omni topic into a Databricks Metric View by exploring the Omni model via API, translating its field definitions into the Databricks Metric View embedded YAML format, and executing via the Databricks CLI.\n\nSee [FIELD-MAPPING.md](.\u002Freferences\u002FFIELD-MAPPING.md) for full before\u002Fafter translation examples and [YAML-REFERENCE.md](.\u002Freferences\u002FYAML-REFERENCE.md) for the complete YAML structure, aggregate type, and format mapping tables.\n\n---\n\n## Prerequisites\n\n```bash\n# Verify the Omni CLI is installed — if not, ask the user to install it\n# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\ncommand -v omni >\u002Fdev\u002Fnull || echo \"ERROR: Omni CLI is not installed.\"\n```\n\n```bash\n# Show available profiles and select the appropriate one\nomni config show\n# If multiple profiles exist, ask the user which to use, then switch:\nomni config use \u003Cprofile-name>\n\n# Confirm the active profile is authenticated and inspect your permissions:\nomni whoami whoami\n```\n\n> **Auth**: a profile authenticates with an **API key** or **OAuth**. If `whoami` (or any call) returns **401**, hand off — ask the user to run `! omni config login \u003Cprofile>` (OAuth 2.1 browser flow; it blocks ~2 min on the browser). Don't run `config login` yourself in a headless\u002FCI session (no browser → timeout); on a local interactive machine you *may*. See the **`omni-api-conventions`** rule for profile setup (`omni config init --auth oauth`) and discovering request-body shapes with `--schema`.\n\n```bash\n# Databricks CLI — verify installed and list configured profile names\ndatabricks --version\ndatabricks auth profiles\n```\n\n---\n\n> **Tip**: Use `-o json` to force structured output for programmatic parsing, or `-o human` for readable tables. The default is `auto` (human in a TTY, JSON when piped).\n\n## Workflow\n\n### Step 1 — Gather Requirements\n\nAsk the user:\n\n1. Which **Omni topic** do they want to convert? (e.g., `orders`)\n2. What is the **Unity Catalog destination**? (`catalog.schema`) (e.g., `main.sales`)\n3. What is the **Databricks SQL Warehouse ID**? (run `databricks sql warehouses list` to find it)\n4. Is this a **new metric view** or does one already exist at `catalog.schema.[topic_name]_mv`?\n5. Which **Databricks CLI profile** to use (optional — only if the user has multiple profiles)?\n\n> ⚠️ **STOP** — Confirm all answers before proceeding. The metric view will be named `[topic_name]_mv` by default.\n\n---\n\n### Step 2 — Explore the Omni Model\n\n#### 2a. Find the model ID\n\n```bash\nomni models list --modelkind SHARED\n```\n\nIdentify the **Shared Model** and note its `id`. Always prefer the Shared Model over Schema or Workbook models.\n\n#### 2b. Fetch the topic file\n\n```bash\nomni models yaml-get \u003CmodelId> --filename \u003Ctopic_name>.topic\n```\n\nFrom the topic file extract: `base_view`, `joins`, `fields`, `always_filter`, `ai_context`, `sample_queries`.\n\n#### 2c. Fetch the relationships file\n\n```bash\nomni models yaml-get \u003CmodelId> --filename relationships\n```\n\n#### 2d. Fetch each view file referenced in the topic\n\nFor every view in `base_view` and `joins`:\n\n```bash\nomni models yaml-get \u003CmodelId> --filename \u003Cview_name>.view\n```\n\n> If a view is prefixed with `omni_dbt_`, fetch the file starting with `omni_dbt_`. Skip any view backed by `derived_table.sql` — it has no physical table.\n\n---\n\n### Step 3 — Identify Tables and Joins\n\nMap view names to fully-qualified Databricks table references (`catalog.schema.table`):\n\n| Omni view name | Databricks table |\n|---|---|\n| `ecomm__order_items` | `catalog.ecomm.order_items` |\n| `omni_dbt_ecomm__order_items` | `catalog.ecomm.order_items` (strip `omni_dbt_`) |\n\nThe `__` separator maps to schema (left) and table (right). Confirm the catalog prefix with the user.\n\nThe `joins` indentation defines the join chain — a view indented beneath another joins into its parent:\n\n```yaml\njoins:\n  user_order_facts: {}          # skip — derived CTE\n  ecomm__users: {}              # joins to base_view\n  ecomm__inventory_items:       # joins to base_view\n    ecomm__products:            # joins to inventory_items\n```\n\nFind the dimension with `primary_key: true` in each view — list it first among that table's dimensions.\n\n> ✋ **STOP** — Confirm the full table list and join hierarchy with the user before continuing.\n\n---\n\n### Step 4 — Resolve the Field List\n\n| Syntax | Meaning |\n|---|---|\n| *(no `fields` parameter)* | Include **all** fields from all views |\n| `all_views.*` \u002F `view.*` | Include all fields from all views \u002F named view |\n| `tag:\u003Cvalue>` | Include all fields with this tag |\n| `view.field` | Include this specific field |\n| `-view.field` | **Exclude** this field (always wins over wildcard inclusions) |\n\nProcess inclusions first, then apply exclusions. Also remove any field with `hidden: true` unless explicitly included by name.\n\n---\n\n### Step 5 — Build Join Definitions\n\nUsing the hierarchy from Step 3 and `relationships.yaml`, extract join columns from `on_sql` and build the `on:` clause. Use the view name as the join `name`.\n\n**Star schema (single-level):**\n```yaml\njoins:\n  - name: ecomm__users\n    source: catalog.ecomm.users\n    'on': source.user_id = ecomm__users.id\n```\n\n**Snowflake schema (multi-hop):**\n```yaml\njoins:\n  - name: ecomm__inventory_items\n    source: catalog.ecomm.inventory_items\n    'on': source.inventory_item_id = ecomm__inventory_items.id\n    joins:\n      - name: ecomm__products\n        source: catalog.ecomm.products\n        'on': ecomm__inventory_items.product_id = ecomm__products.id\n```\n\n> ⚠️ `on` is a YAML 1.1 reserved word — **always single-quote the key** as `'on':`. Columns from nested (2+ level) joins **cannot** be used in `expr` — flatten them through a denormalized direct join instead.\n\n---\n\n### Step 6 — Map Dimensions and Measures\n\nFor each field that survived Step 4, translate it using the rules below. See [FIELD-MAPPING.md](.\u002Freferences\u002FFIELD-MAPPING.md) for full examples.\n\n**Dimension quick reference:**\n\n| Omni field type | Databricks translation |\n|---|---|\n| Standard string\u002Fnumber | `expr: COLUMN` |\n| `type: time` (no timeframes) | Single timestamp dimension |\n| `type: time` + `timeframes` | One `DATE_TRUNC(...)` dimension per timeframe |\n| `groups:` | `CASE WHEN ... END` expression |\n| `bin_boundaries:` | `CASE WHEN` range expression |\n| `duration:` | `DATEDIFF(unit, start, end)` expression |\n| `type: yesno` | BOOLEAN dimension (not a filter; omit `data_type`) |\n\n**Measure quick reference:**\n\n| Omni measure type | Databricks translation |\n|---|---|\n| `aggregate_type: sum\u002Favg\u002Fmax\u002Fmin` | `SUM(col)` \u002F `AVG(col)` \u002F etc. |\n| `aggregate_type: count` | `COUNT(*)` |\n| `aggregate_type: count_distinct` | `COUNT(DISTINCT col)` |\n| Derived (refs other measures) | `MEASURE(measure_a) op MEASURE(measure_b)` — define atomics first |\n| `filters:` on a measure | `AGG(col) FILTER (WHERE condition)` |\n\nStrip Omni's `${view.column}` refs to bare column names (or `join_name.column` for joined fields). Use `display_name` for the Omni `label`, `comment` for `description`, and carry `synonyms` directly. See [YAML-REFERENCE.md](.\u002Freferences\u002FYAML-REFERENCE.md) for format and aggregate type mapping tables.\n\nIf the topic has `ai_context`, carry it into the metric view's top-level `comment`.\n\n> ✋ **STOP** — Review all dimensions, measures, and join definitions with the user before generating the final output.\n\n---\n\n### Step 7 — Check for Existing Metric View\n\n```bash\ndatabricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements \\\n  --json \"{\\\"warehouse_id\\\": \\\"\u003CWAREHOUSE_ID>\\\", \\\"statement\\\": \\\"SHOW VIEWS IN \u003Ccatalog>.\u003Cschema> LIKE '%_mv'\\\", \\\"wait_timeout\\\": \\\"30s\\\", \\\"catalog\\\": \\\"\u003CCATALOG>\\\", \\\"schema\\\": \\\"\u003CSCHEMA>\\\"}\"\n```\n\n- View **does not exist** → use `CREATE OR REPLACE VIEW ... WITH METRICS`\n- View **already exists** → use `ALTER VIEW ... AS $$ ... $$`\n\n---\n\n### Step 8 — Generate and Execute the SQL\n\nWrite the SQL to a temp file:\n\n```sql\n-- CREATE (new view)\nCREATE OR REPLACE VIEW catalog.schema.orders_mv\nWITH METRICS\nLANGUAGE YAML\nAS $$\nversion: 1.1\ncomment: \"...\"\nsource: catalog.ecomm.order_items\n\njoins:\n  - name: ecomm__users\n    source: catalog.ecomm.users\n    'on': source.user_id = ecomm__users.id\n\ndimensions:\n  - name: id\n    expr: id\n    display_name: \"Order ID\"\n\n  - name: status\n    expr: status\n    display_name: \"Order Status\"\n\nmeasures:\n  - name: order_count\n    expr: COUNT(*)\n    display_name: \"Order Count\"\n\n  - name: total_sale_price\n    expr: SUM(sale_price)\n    display_name: \"Total Sale Price\"\n    format:\n      type: currency\n      currency_code: USD\n$$\n```\n\n```sql\n-- ALTER (existing view)\nALTER VIEW catalog.schema.orders_mv AS $$\nversion: 1.1\n...\n$$\n```\n\nExecute via the SQL Statements API (`databricks sql execute` does not exist in CLI v0.295.0+).\n\nWrite the request body as a JSON file (with the SQL embedded as a properly-quoted string) and pass it via `--json @file`. This avoids shell substitution of arbitrary SQL content into the command line:\n\n```bash\n# \u002Ftmp\u002Forders_mv.payload.json\n{\n  \"warehouse_id\": \"\u003CWAREHOUSE_ID>\",\n  \"statement\": \"\u003CSQL with newlines as \\\\n and quotes as \\\\\\\">\",\n  \"wait_timeout\": \"50s\",\n  \"catalog\": \"\u003CCATALOG>\",\n  \"schema\": \"\u003CSCHEMA>\"\n}\n```\n\n```bash\ndatabricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements --json @\u002Ftmp\u002Forders_mv.payload.json\n```\n\nCheck the response for `\"state\": \"SUCCEEDED\"`. If `\"state\": \"FAILED\"`, read `status.error.message` and see the Troubleshooting section below.\n\n> ✋ **STOP** — Confirm which group or user should receive access before running the GRANT. This is a permission change visible to others.\n\nGrant access:\n\n```bash\ndatabricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements \\\n  --json \"{\\\"warehouse_id\\\": \\\"\u003CWAREHOUSE_ID>\\\", \\\"statement\\\": \\\"GRANT SELECT ON VIEW catalog.schema.orders_mv TO \\`group_name\\`\\\", \\\"wait_timeout\\\": \\\"30s\\\", \\\"catalog\\\": \\\"\u003CCATALOG>\\\", \\\"schema\\\": \\\"\u003CSCHEMA>\\\"}\"\n```\n\n---\n\n## Troubleshooting\n\nWhen the SQL Statements API returns `\"state\": \"FAILED\"`, read `status.error.message`:\n\n| Error message contains | Likely cause | Fix |\n|---|---|---|\n| `METRIC_VIEW_INVALID_VIEW_DEFINITION` | Invalid YAML field or value | Check the field name against the valid keys (`name`, `expr`, `display_name`, `comment`, `synonyms`, `format`). Common mistakes: using `description` instead of `comment`, unsupported `decimal_places`. |\n| `warehouse not running` \u002F `RESOURCE_DOES_NOT_EXIST` | Warehouse is stopped or wrong ID | Start the warehouse in the Databricks UI or verify the ID with `databricks api get \u002Fapi\u002F2.0\u002Fsql\u002Fwarehouses`. |\n| `PERMISSION_DENIED` | The CLI profile lacks privileges | Check the profile's permissions on the catalog\u002Fschema with `databricks api get \u002Fapi\u002F2.0\u002Funity-catalog\u002Fpermissions\u002F...`. |\n| `TABLE_OR_VIEW_NOT_FOUND` | A source or join table doesn't exist in Unity Catalog | Verify each table reference with `SHOW TABLES IN \u003Ccatalog>.\u003Cschema>`. |\n| `on` parse error \u002F unexpected key | `on:` not quoted | Always write `'on':` (single-quoted) — it is a YAML 1.1 reserved word. |\n| `wait_timeout` value error | Timeout out of range | `wait_timeout` must be between `5s` and `50s`. |\n\nIf the error message is truncated, run the same statement with `\"wait_timeout\": \"5s\"` to get the full synchronous error response.\n\n---\n\n## Critical Rules\n\n1. **Naming**: Name the metric view `[topic_name]_mv` (snake_case, lowercase)\n2. **CREATE vs ALTER**: Check for existence first — `CREATE OR REPLACE` for new, `ALTER VIEW` for existing\n3. **Version**: Always use `version: 1.1` (requires Databricks Runtime 17.2+)\n4. **Skip derived CTEs**: Views with `derived_table.sql` have no physical table — skip and warn the user\n5. **Confirm before executing**: Show the full generated SQL to the user before running\n6. **Boolean fields**: Map `type: yesno` as BOOLEAN dimensions — not filters. `data_type` is not a valid field — omit it\n7. **Composed measures**: Use `MEASURE()` syntax; define atomic measures before composed ones\n8. **YAML quoting**: `on` is a YAML 1.1 reserved word — always write `'on':` (single-quoted)\n9. **No SELECT \\***: All fields must be explicitly defined\n10. **MAP columns**: Skip joins to tables containing `MAP` type columns — not supported\n11. **Nested join refs**: Only direct star join columns (1 level) can be used in `expr`. Flatten snowflake schema joins through a denormalized direct join\n12. **Warehouse ID required**: Always confirm before execution — cannot be inferred\n13. **Exclusions win**: `-view.field` always overrides any wildcard inclusion\n14. **Format type values are lowercase**: `number`, `currency`, `date`, `date_time`, `percentage`, `byte`\n15. **Date format required**: `type: date` and `type: date_time` both require `date_format`\n16. **Currency format**: Use `currency_code: USD` not `iso_code: USD`\n17. **`decimal_places` unsupported**: Omit it entirely — causes a parse error\n18. **CLI execution**: Use `databricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements`; `wait_timeout` must be `5s`–`50s`\n19. **Omni CLI flag**: Use `--filename` (not `--file-name`)\n20. **Field description key**: Use `comment:` not `description:` — `description` is not a recognized field and causes a parse error\n\n---\n\n## Reference\n\n- [Databricks Metric Views overview](https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002F)\n- [Create a metric view with SQL](https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fcreate\u002Fsql)\n- [Metric view syntax reference](https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fsyntax)\n- [Semantic metadata](https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fsemantic-metadata)\n- [Joins](https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fjoins)\n- [Composability](https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fcomposability)\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,57,79,83,90,179,295,390,434,437,474,480,487,492,594,617,620,626,633,667,687,693,762,810,816,863,869,888,952,983,986,992,1005,1082,1095,1106,1205,1218,1232,1235,1241,1374,1387,1390,1396,1432,1440,1524,1532,1686,1730,1733,1739,1750,1758,1940,1948,2083,2149,2167,2180,2183,2189,2417,2455,2458,2464,2469,2779,2824,2837,2850,3040,3076,3104,3117,3122,3343,3346,3352,3369,3647,3660,3663,3669,4104,4107,4113,4177],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"omni-databricks-metric-view",[48],{"type":49,"value":50},"text","Omni → Databricks Metric View",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Converts an Omni topic into a Databricks Metric View by exploring the Omni model via API, translating its field definitions into the Databricks Metric View embedded YAML format, and executing via the Databricks CLI.",{"type":43,"tag":52,"props":58,"children":59},{},[60,62,69,71,77],{"type":49,"value":61},"See ",{"type":43,"tag":63,"props":64,"children":66},"a",{"href":65},".\u002Freferences\u002FFIELD-MAPPING.md",[67],{"type":49,"value":68},"FIELD-MAPPING.md",{"type":49,"value":70}," for full before\u002Fafter translation examples and ",{"type":43,"tag":63,"props":72,"children":74},{"href":73},".\u002Freferences\u002FYAML-REFERENCE.md",[75],{"type":49,"value":76},"YAML-REFERENCE.md",{"type":49,"value":78}," for the complete YAML structure, aggregate type, and format mapping tables.",{"type":43,"tag":80,"props":81,"children":82},"hr",{},[],{"type":43,"tag":84,"props":85,"children":87},"h2",{"id":86},"prerequisites",[88],{"type":49,"value":89},"Prerequisites",{"type":43,"tag":91,"props":92,"children":97},"pre",{"className":93,"code":94,"language":95,"meta":96,"style":96},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Verify the Omni CLI is installed — if not, ask the user to install it\n# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\ncommand -v omni >\u002Fdev\u002Fnull || echo \"ERROR: Omni CLI is not installed.\"\n","bash","",[98],{"type":43,"tag":99,"props":100,"children":101},"code",{"__ignoreMap":96},[102,114,123],{"type":43,"tag":103,"props":104,"children":107},"span",{"class":105,"line":106},"line",1,[108],{"type":43,"tag":103,"props":109,"children":111},{"style":110},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[112],{"type":49,"value":113},"# Verify the Omni CLI is installed — if not, ask the user to install it\n",{"type":43,"tag":103,"props":115,"children":117},{"class":105,"line":116},2,[118],{"type":43,"tag":103,"props":119,"children":120},{"style":110},[121],{"type":49,"value":122},"# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\n",{"type":43,"tag":103,"props":124,"children":125},{"class":105,"line":30},[126,132,138,143,149,154,159,164,169,174],{"type":43,"tag":103,"props":127,"children":129},{"style":128},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[130],{"type":49,"value":131},"command",{"type":43,"tag":103,"props":133,"children":135},{"style":134},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[136],{"type":49,"value":137}," -v",{"type":43,"tag":103,"props":139,"children":140},{"style":134},[141],{"type":49,"value":142}," omni",{"type":43,"tag":103,"props":144,"children":146},{"style":145},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[147],{"type":49,"value":148}," >",{"type":43,"tag":103,"props":150,"children":151},{"style":134},[152],{"type":49,"value":153},"\u002Fdev\u002Fnull",{"type":43,"tag":103,"props":155,"children":156},{"style":145},[157],{"type":49,"value":158}," ||",{"type":43,"tag":103,"props":160,"children":161},{"style":128},[162],{"type":49,"value":163}," echo",{"type":43,"tag":103,"props":165,"children":166},{"style":145},[167],{"type":49,"value":168}," \"",{"type":43,"tag":103,"props":170,"children":171},{"style":134},[172],{"type":49,"value":173},"ERROR: Omni CLI is not installed.",{"type":43,"tag":103,"props":175,"children":176},{"style":145},[177],{"type":49,"value":178},"\"\n",{"type":43,"tag":91,"props":180,"children":182},{"className":93,"code":181,"language":95,"meta":96,"style":96},"# Show available profiles and select the appropriate one\nomni config show\n# If multiple profiles exist, ask the user which to use, then switch:\nomni config use \u003Cprofile-name>\n\n# Confirm the active profile is authenticated and inspect your permissions:\nomni whoami whoami\n",[183],{"type":43,"tag":99,"props":184,"children":185},{"__ignoreMap":96},[186,194,212,220,258,268,277],{"type":43,"tag":103,"props":187,"children":188},{"class":105,"line":106},[189],{"type":43,"tag":103,"props":190,"children":191},{"style":110},[192],{"type":49,"value":193},"# Show available profiles and select the appropriate one\n",{"type":43,"tag":103,"props":195,"children":196},{"class":105,"line":116},[197,202,207],{"type":43,"tag":103,"props":198,"children":200},{"style":199},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[201],{"type":49,"value":19},{"type":43,"tag":103,"props":203,"children":204},{"style":134},[205],{"type":49,"value":206}," config",{"type":43,"tag":103,"props":208,"children":209},{"style":134},[210],{"type":49,"value":211}," show\n",{"type":43,"tag":103,"props":213,"children":214},{"class":105,"line":30},[215],{"type":43,"tag":103,"props":216,"children":217},{"style":110},[218],{"type":49,"value":219},"# If multiple profiles exist, ask the user which to use, then switch:\n",{"type":43,"tag":103,"props":221,"children":223},{"class":105,"line":222},4,[224,228,232,237,242,247,253],{"type":43,"tag":103,"props":225,"children":226},{"style":199},[227],{"type":49,"value":19},{"type":43,"tag":103,"props":229,"children":230},{"style":134},[231],{"type":49,"value":206},{"type":43,"tag":103,"props":233,"children":234},{"style":134},[235],{"type":49,"value":236}," use",{"type":43,"tag":103,"props":238,"children":239},{"style":145},[240],{"type":49,"value":241}," \u003C",{"type":43,"tag":103,"props":243,"children":244},{"style":134},[245],{"type":49,"value":246},"profile-nam",{"type":43,"tag":103,"props":248,"children":250},{"style":249},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[251],{"type":49,"value":252},"e",{"type":43,"tag":103,"props":254,"children":255},{"style":145},[256],{"type":49,"value":257},">\n",{"type":43,"tag":103,"props":259,"children":261},{"class":105,"line":260},5,[262],{"type":43,"tag":103,"props":263,"children":265},{"emptyLinePlaceholder":264},true,[266],{"type":49,"value":267},"\n",{"type":43,"tag":103,"props":269,"children":271},{"class":105,"line":270},6,[272],{"type":43,"tag":103,"props":273,"children":274},{"style":110},[275],{"type":49,"value":276},"# Confirm the active profile is authenticated and inspect your permissions:\n",{"type":43,"tag":103,"props":278,"children":280},{"class":105,"line":279},7,[281,285,290],{"type":43,"tag":103,"props":282,"children":283},{"style":199},[284],{"type":49,"value":19},{"type":43,"tag":103,"props":286,"children":287},{"style":134},[288],{"type":49,"value":289}," whoami",{"type":43,"tag":103,"props":291,"children":292},{"style":134},[293],{"type":49,"value":294}," whoami\n",{"type":43,"tag":296,"props":297,"children":298},"blockquote",{},[299],{"type":43,"tag":52,"props":300,"children":301},{},[302,308,310,315,317,322,324,330,332,337,339,345,347,353,355,361,363,372,374,380,382,388],{"type":43,"tag":303,"props":304,"children":305},"strong",{},[306],{"type":49,"value":307},"Auth",{"type":49,"value":309},": a profile authenticates with an ",{"type":43,"tag":303,"props":311,"children":312},{},[313],{"type":49,"value":314},"API key",{"type":49,"value":316}," or ",{"type":43,"tag":303,"props":318,"children":319},{},[320],{"type":49,"value":321},"OAuth",{"type":49,"value":323},". If ",{"type":43,"tag":99,"props":325,"children":327},{"className":326},[],[328],{"type":49,"value":329},"whoami",{"type":49,"value":331}," (or any call) returns ",{"type":43,"tag":303,"props":333,"children":334},{},[335],{"type":49,"value":336},"401",{"type":49,"value":338},", hand off — ask the user to run ",{"type":43,"tag":99,"props":340,"children":342},{"className":341},[],[343],{"type":49,"value":344},"! omni config login \u003Cprofile>",{"type":49,"value":346}," (OAuth 2.1 browser flow; it blocks ~2 min on the browser). Don't run ",{"type":43,"tag":99,"props":348,"children":350},{"className":349},[],[351],{"type":49,"value":352},"config login",{"type":49,"value":354}," yourself in a headless\u002FCI session (no browser → timeout); on a local interactive machine you ",{"type":43,"tag":356,"props":357,"children":358},"em",{},[359],{"type":49,"value":360},"may",{"type":49,"value":362},". See the ",{"type":43,"tag":303,"props":364,"children":365},{},[366],{"type":43,"tag":99,"props":367,"children":369},{"className":368},[],[370],{"type":49,"value":371},"omni-api-conventions",{"type":49,"value":373}," rule for profile setup (",{"type":43,"tag":99,"props":375,"children":377},{"className":376},[],[378],{"type":49,"value":379},"omni config init --auth oauth",{"type":49,"value":381},") and discovering request-body shapes with ",{"type":43,"tag":99,"props":383,"children":385},{"className":384},[],[386],{"type":49,"value":387},"--schema",{"type":49,"value":389},".",{"type":43,"tag":91,"props":391,"children":393},{"className":93,"code":392,"language":95,"meta":96,"style":96},"# Databricks CLI — verify installed and list configured profile names\ndatabricks --version\ndatabricks auth profiles\n",[394],{"type":43,"tag":99,"props":395,"children":396},{"__ignoreMap":96},[397,405,417],{"type":43,"tag":103,"props":398,"children":399},{"class":105,"line":106},[400],{"type":43,"tag":103,"props":401,"children":402},{"style":110},[403],{"type":49,"value":404},"# Databricks CLI — verify installed and list configured profile names\n",{"type":43,"tag":103,"props":406,"children":407},{"class":105,"line":116},[408,412],{"type":43,"tag":103,"props":409,"children":410},{"style":199},[411],{"type":49,"value":22},{"type":43,"tag":103,"props":413,"children":414},{"style":134},[415],{"type":49,"value":416}," --version\n",{"type":43,"tag":103,"props":418,"children":419},{"class":105,"line":30},[420,424,429],{"type":43,"tag":103,"props":421,"children":422},{"style":199},[423],{"type":49,"value":22},{"type":43,"tag":103,"props":425,"children":426},{"style":134},[427],{"type":49,"value":428}," auth",{"type":43,"tag":103,"props":430,"children":431},{"style":134},[432],{"type":49,"value":433}," profiles\n",{"type":43,"tag":80,"props":435,"children":436},{},[],{"type":43,"tag":296,"props":438,"children":439},{},[440],{"type":43,"tag":52,"props":441,"children":442},{},[443,448,450,456,458,464,466,472],{"type":43,"tag":303,"props":444,"children":445},{},[446],{"type":49,"value":447},"Tip",{"type":49,"value":449},": Use ",{"type":43,"tag":99,"props":451,"children":453},{"className":452},[],[454],{"type":49,"value":455},"-o json",{"type":49,"value":457}," to force structured output for programmatic parsing, or ",{"type":43,"tag":99,"props":459,"children":461},{"className":460},[],[462],{"type":49,"value":463},"-o human",{"type":49,"value":465}," for readable tables. The default is ",{"type":43,"tag":99,"props":467,"children":469},{"className":468},[],[470],{"type":49,"value":471},"auto",{"type":49,"value":473}," (human in a TTY, JSON when piped).",{"type":43,"tag":84,"props":475,"children":477},{"id":476},"workflow",[478],{"type":49,"value":479},"Workflow",{"type":43,"tag":481,"props":482,"children":484},"h3",{"id":483},"step-1-gather-requirements",[485],{"type":49,"value":486},"Step 1 — Gather Requirements",{"type":43,"tag":52,"props":488,"children":489},{},[490],{"type":49,"value":491},"Ask the user:",{"type":43,"tag":493,"props":494,"children":495},"ol",{},[496,517,544,563,583],{"type":43,"tag":497,"props":498,"children":499},"li",{},[500,502,507,509,515],{"type":49,"value":501},"Which ",{"type":43,"tag":303,"props":503,"children":504},{},[505],{"type":49,"value":506},"Omni topic",{"type":49,"value":508}," do they want to convert? (e.g., ",{"type":43,"tag":99,"props":510,"children":512},{"className":511},[],[513],{"type":49,"value":514},"orders",{"type":49,"value":516},")",{"type":43,"tag":497,"props":518,"children":519},{},[520,522,527,529,535,537,543],{"type":49,"value":521},"What is the ",{"type":43,"tag":303,"props":523,"children":524},{},[525],{"type":49,"value":526},"Unity Catalog destination",{"type":49,"value":528},"? (",{"type":43,"tag":99,"props":530,"children":532},{"className":531},[],[533],{"type":49,"value":534},"catalog.schema",{"type":49,"value":536},") (e.g., ",{"type":43,"tag":99,"props":538,"children":540},{"className":539},[],[541],{"type":49,"value":542},"main.sales",{"type":49,"value":516},{"type":43,"tag":497,"props":545,"children":546},{},[547,548,553,555,561],{"type":49,"value":521},{"type":43,"tag":303,"props":549,"children":550},{},[551],{"type":49,"value":552},"Databricks SQL Warehouse ID",{"type":49,"value":554},"? (run ",{"type":43,"tag":99,"props":556,"children":558},{"className":557},[],[559],{"type":49,"value":560},"databricks sql warehouses list",{"type":49,"value":562}," to find it)",{"type":43,"tag":497,"props":564,"children":565},{},[566,568,573,575,581],{"type":49,"value":567},"Is this a ",{"type":43,"tag":303,"props":569,"children":570},{},[571],{"type":49,"value":572},"new metric view",{"type":49,"value":574}," or does one already exist at ",{"type":43,"tag":99,"props":576,"children":578},{"className":577},[],[579],{"type":49,"value":580},"catalog.schema.[topic_name]_mv",{"type":49,"value":582},"?",{"type":43,"tag":497,"props":584,"children":585},{},[586,587,592],{"type":49,"value":501},{"type":43,"tag":303,"props":588,"children":589},{},[590],{"type":49,"value":591},"Databricks CLI profile",{"type":49,"value":593}," to use (optional — only if the user has multiple profiles)?",{"type":43,"tag":296,"props":595,"children":596},{},[597],{"type":43,"tag":52,"props":598,"children":599},{},[600,602,607,609,615],{"type":49,"value":601},"⚠️ ",{"type":43,"tag":303,"props":603,"children":604},{},[605],{"type":49,"value":606},"STOP",{"type":49,"value":608}," — Confirm all answers before proceeding. The metric view will be named ",{"type":43,"tag":99,"props":610,"children":612},{"className":611},[],[613],{"type":49,"value":614},"[topic_name]_mv",{"type":49,"value":616}," by default.",{"type":43,"tag":80,"props":618,"children":619},{},[],{"type":43,"tag":481,"props":621,"children":623},{"id":622},"step-2-explore-the-omni-model",[624],{"type":49,"value":625},"Step 2 — Explore the Omni Model",{"type":43,"tag":627,"props":628,"children":630},"h4",{"id":629},"_2a-find-the-model-id",[631],{"type":49,"value":632},"2a. Find the model ID",{"type":43,"tag":91,"props":634,"children":636},{"className":93,"code":635,"language":95,"meta":96,"style":96},"omni models list --modelkind SHARED\n",[637],{"type":43,"tag":99,"props":638,"children":639},{"__ignoreMap":96},[640],{"type":43,"tag":103,"props":641,"children":642},{"class":105,"line":106},[643,647,652,657,662],{"type":43,"tag":103,"props":644,"children":645},{"style":199},[646],{"type":49,"value":19},{"type":43,"tag":103,"props":648,"children":649},{"style":134},[650],{"type":49,"value":651}," models",{"type":43,"tag":103,"props":653,"children":654},{"style":134},[655],{"type":49,"value":656}," list",{"type":43,"tag":103,"props":658,"children":659},{"style":134},[660],{"type":49,"value":661}," --modelkind",{"type":43,"tag":103,"props":663,"children":664},{"style":134},[665],{"type":49,"value":666}," SHARED\n",{"type":43,"tag":52,"props":668,"children":669},{},[670,672,677,679,685],{"type":49,"value":671},"Identify the ",{"type":43,"tag":303,"props":673,"children":674},{},[675],{"type":49,"value":676},"Shared Model",{"type":49,"value":678}," and note its ",{"type":43,"tag":99,"props":680,"children":682},{"className":681},[],[683],{"type":49,"value":684},"id",{"type":49,"value":686},". Always prefer the Shared Model over Schema or Workbook models.",{"type":43,"tag":627,"props":688,"children":690},{"id":689},"_2b-fetch-the-topic-file",[691],{"type":49,"value":692},"2b. Fetch the topic file",{"type":43,"tag":91,"props":694,"children":696},{"className":93,"code":695,"language":95,"meta":96,"style":96},"omni models yaml-get \u003CmodelId> --filename \u003Ctopic_name>.topic\n",[697],{"type":43,"tag":99,"props":698,"children":699},{"__ignoreMap":96},[700],{"type":43,"tag":103,"props":701,"children":702},{"class":105,"line":106},[703,707,711,716,720,725,730,735,740,744,749,753,757],{"type":43,"tag":103,"props":704,"children":705},{"style":199},[706],{"type":49,"value":19},{"type":43,"tag":103,"props":708,"children":709},{"style":134},[710],{"type":49,"value":651},{"type":43,"tag":103,"props":712,"children":713},{"style":134},[714],{"type":49,"value":715}," yaml-get",{"type":43,"tag":103,"props":717,"children":718},{"style":145},[719],{"type":49,"value":241},{"type":43,"tag":103,"props":721,"children":722},{"style":134},[723],{"type":49,"value":724},"modelI",{"type":43,"tag":103,"props":726,"children":727},{"style":249},[728],{"type":49,"value":729},"d",{"type":43,"tag":103,"props":731,"children":732},{"style":145},[733],{"type":49,"value":734},">",{"type":43,"tag":103,"props":736,"children":737},{"style":134},[738],{"type":49,"value":739}," --filename",{"type":43,"tag":103,"props":741,"children":742},{"style":145},[743],{"type":49,"value":241},{"type":43,"tag":103,"props":745,"children":746},{"style":134},[747],{"type":49,"value":748},"topic_nam",{"type":43,"tag":103,"props":750,"children":751},{"style":249},[752],{"type":49,"value":252},{"type":43,"tag":103,"props":754,"children":755},{"style":145},[756],{"type":49,"value":734},{"type":43,"tag":103,"props":758,"children":759},{"style":134},[760],{"type":49,"value":761},".topic\n",{"type":43,"tag":52,"props":763,"children":764},{},[765,767,773,775,781,782,788,789,795,796,802,803,809],{"type":49,"value":766},"From the topic file extract: ",{"type":43,"tag":99,"props":768,"children":770},{"className":769},[],[771],{"type":49,"value":772},"base_view",{"type":49,"value":774},", ",{"type":43,"tag":99,"props":776,"children":778},{"className":777},[],[779],{"type":49,"value":780},"joins",{"type":49,"value":774},{"type":43,"tag":99,"props":783,"children":785},{"className":784},[],[786],{"type":49,"value":787},"fields",{"type":49,"value":774},{"type":43,"tag":99,"props":790,"children":792},{"className":791},[],[793],{"type":49,"value":794},"always_filter",{"type":49,"value":774},{"type":43,"tag":99,"props":797,"children":799},{"className":798},[],[800],{"type":49,"value":801},"ai_context",{"type":49,"value":774},{"type":43,"tag":99,"props":804,"children":806},{"className":805},[],[807],{"type":49,"value":808},"sample_queries",{"type":49,"value":389},{"type":43,"tag":627,"props":811,"children":813},{"id":812},"_2c-fetch-the-relationships-file",[814],{"type":49,"value":815},"2c. Fetch the relationships file",{"type":43,"tag":91,"props":817,"children":819},{"className":93,"code":818,"language":95,"meta":96,"style":96},"omni models yaml-get \u003CmodelId> --filename relationships\n",[820],{"type":43,"tag":99,"props":821,"children":822},{"__ignoreMap":96},[823],{"type":43,"tag":103,"props":824,"children":825},{"class":105,"line":106},[826,830,834,838,842,846,850,854,858],{"type":43,"tag":103,"props":827,"children":828},{"style":199},[829],{"type":49,"value":19},{"type":43,"tag":103,"props":831,"children":832},{"style":134},[833],{"type":49,"value":651},{"type":43,"tag":103,"props":835,"children":836},{"style":134},[837],{"type":49,"value":715},{"type":43,"tag":103,"props":839,"children":840},{"style":145},[841],{"type":49,"value":241},{"type":43,"tag":103,"props":843,"children":844},{"style":134},[845],{"type":49,"value":724},{"type":43,"tag":103,"props":847,"children":848},{"style":249},[849],{"type":49,"value":729},{"type":43,"tag":103,"props":851,"children":852},{"style":145},[853],{"type":49,"value":734},{"type":43,"tag":103,"props":855,"children":856},{"style":134},[857],{"type":49,"value":739},{"type":43,"tag":103,"props":859,"children":860},{"style":134},[861],{"type":49,"value":862}," relationships\n",{"type":43,"tag":627,"props":864,"children":866},{"id":865},"_2d-fetch-each-view-file-referenced-in-the-topic",[867],{"type":49,"value":868},"2d. Fetch each view file referenced in the topic",{"type":43,"tag":52,"props":870,"children":871},{},[872,874,879,881,886],{"type":49,"value":873},"For every view in ",{"type":43,"tag":99,"props":875,"children":877},{"className":876},[],[878],{"type":49,"value":772},{"type":49,"value":880}," and ",{"type":43,"tag":99,"props":882,"children":884},{"className":883},[],[885],{"type":49,"value":780},{"type":49,"value":887},":",{"type":43,"tag":91,"props":889,"children":891},{"className":93,"code":890,"language":95,"meta":96,"style":96},"omni models yaml-get \u003CmodelId> --filename \u003Cview_name>.view\n",[892],{"type":43,"tag":99,"props":893,"children":894},{"__ignoreMap":96},[895],{"type":43,"tag":103,"props":896,"children":897},{"class":105,"line":106},[898,902,906,910,914,918,922,926,930,934,939,943,947],{"type":43,"tag":103,"props":899,"children":900},{"style":199},[901],{"type":49,"value":19},{"type":43,"tag":103,"props":903,"children":904},{"style":134},[905],{"type":49,"value":651},{"type":43,"tag":103,"props":907,"children":908},{"style":134},[909],{"type":49,"value":715},{"type":43,"tag":103,"props":911,"children":912},{"style":145},[913],{"type":49,"value":241},{"type":43,"tag":103,"props":915,"children":916},{"style":134},[917],{"type":49,"value":724},{"type":43,"tag":103,"props":919,"children":920},{"style":249},[921],{"type":49,"value":729},{"type":43,"tag":103,"props":923,"children":924},{"style":145},[925],{"type":49,"value":734},{"type":43,"tag":103,"props":927,"children":928},{"style":134},[929],{"type":49,"value":739},{"type":43,"tag":103,"props":931,"children":932},{"style":145},[933],{"type":49,"value":241},{"type":43,"tag":103,"props":935,"children":936},{"style":134},[937],{"type":49,"value":938},"view_nam",{"type":43,"tag":103,"props":940,"children":941},{"style":249},[942],{"type":49,"value":252},{"type":43,"tag":103,"props":944,"children":945},{"style":145},[946],{"type":49,"value":734},{"type":43,"tag":103,"props":948,"children":949},{"style":134},[950],{"type":49,"value":951},".view\n",{"type":43,"tag":296,"props":953,"children":954},{},[955],{"type":43,"tag":52,"props":956,"children":957},{},[958,960,966,968,973,975,981],{"type":49,"value":959},"If a view is prefixed with ",{"type":43,"tag":99,"props":961,"children":963},{"className":962},[],[964],{"type":49,"value":965},"omni_dbt_",{"type":49,"value":967},", fetch the file starting with ",{"type":43,"tag":99,"props":969,"children":971},{"className":970},[],[972],{"type":49,"value":965},{"type":49,"value":974},". Skip any view backed by ",{"type":43,"tag":99,"props":976,"children":978},{"className":977},[],[979],{"type":49,"value":980},"derived_table.sql",{"type":49,"value":982}," — it has no physical table.",{"type":43,"tag":80,"props":984,"children":985},{},[],{"type":43,"tag":481,"props":987,"children":989},{"id":988},"step-3-identify-tables-and-joins",[990],{"type":49,"value":991},"Step 3 — Identify Tables and Joins",{"type":43,"tag":52,"props":993,"children":994},{},[995,997,1003],{"type":49,"value":996},"Map view names to fully-qualified Databricks table references (",{"type":43,"tag":99,"props":998,"children":1000},{"className":999},[],[1001],{"type":49,"value":1002},"catalog.schema.table",{"type":49,"value":1004},"):",{"type":43,"tag":1006,"props":1007,"children":1008},"table",{},[1009,1028],{"type":43,"tag":1010,"props":1011,"children":1012},"thead",{},[1013],{"type":43,"tag":1014,"props":1015,"children":1016},"tr",{},[1017,1023],{"type":43,"tag":1018,"props":1019,"children":1020},"th",{},[1021],{"type":49,"value":1022},"Omni view name",{"type":43,"tag":1018,"props":1024,"children":1025},{},[1026],{"type":49,"value":1027},"Databricks table",{"type":43,"tag":1029,"props":1030,"children":1031},"tbody",{},[1032,1054],{"type":43,"tag":1014,"props":1033,"children":1034},{},[1035,1045],{"type":43,"tag":1036,"props":1037,"children":1038},"td",{},[1039],{"type":43,"tag":99,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":49,"value":1044},"ecomm__order_items",{"type":43,"tag":1036,"props":1046,"children":1047},{},[1048],{"type":43,"tag":99,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":49,"value":1053},"catalog.ecomm.order_items",{"type":43,"tag":1014,"props":1055,"children":1056},{},[1057,1066],{"type":43,"tag":1036,"props":1058,"children":1059},{},[1060],{"type":43,"tag":99,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":49,"value":1065},"omni_dbt_ecomm__order_items",{"type":43,"tag":1036,"props":1067,"children":1068},{},[1069,1074,1076,1081],{"type":43,"tag":99,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":49,"value":1053},{"type":49,"value":1075}," (strip ",{"type":43,"tag":99,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":49,"value":965},{"type":49,"value":516},{"type":43,"tag":52,"props":1083,"children":1084},{},[1085,1087,1093],{"type":49,"value":1086},"The ",{"type":43,"tag":99,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":49,"value":1092},"__",{"type":49,"value":1094}," separator maps to schema (left) and table (right). Confirm the catalog prefix with the user.",{"type":43,"tag":52,"props":1096,"children":1097},{},[1098,1099,1104],{"type":49,"value":1086},{"type":43,"tag":99,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":49,"value":780},{"type":49,"value":1105}," indentation defines the join chain — a view indented beneath another joins into its parent:",{"type":43,"tag":91,"props":1107,"children":1111},{"className":1108,"code":1109,"language":1110,"meta":96,"style":96},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","joins:\n  user_order_facts: {}          # skip — derived CTE\n  ecomm__users: {}              # joins to base_view\n  ecomm__inventory_items:       # joins to base_view\n    ecomm__products:            # joins to inventory_items\n","yaml",[1112],{"type":43,"tag":99,"props":1113,"children":1114},{"__ignoreMap":96},[1115,1128,1150,1171,1188],{"type":43,"tag":103,"props":1116,"children":1117},{"class":105,"line":106},[1118,1123],{"type":43,"tag":103,"props":1119,"children":1121},{"style":1120},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1122],{"type":49,"value":780},{"type":43,"tag":103,"props":1124,"children":1125},{"style":145},[1126],{"type":49,"value":1127},":\n",{"type":43,"tag":103,"props":1129,"children":1130},{"class":105,"line":116},[1131,1136,1140,1145],{"type":43,"tag":103,"props":1132,"children":1133},{"style":1120},[1134],{"type":49,"value":1135},"  user_order_facts",{"type":43,"tag":103,"props":1137,"children":1138},{"style":145},[1139],{"type":49,"value":887},{"type":43,"tag":103,"props":1141,"children":1142},{"style":145},[1143],{"type":49,"value":1144}," {}",{"type":43,"tag":103,"props":1146,"children":1147},{"style":110},[1148],{"type":49,"value":1149},"          # skip — derived CTE\n",{"type":43,"tag":103,"props":1151,"children":1152},{"class":105,"line":30},[1153,1158,1162,1166],{"type":43,"tag":103,"props":1154,"children":1155},{"style":1120},[1156],{"type":49,"value":1157},"  ecomm__users",{"type":43,"tag":103,"props":1159,"children":1160},{"style":145},[1161],{"type":49,"value":887},{"type":43,"tag":103,"props":1163,"children":1164},{"style":145},[1165],{"type":49,"value":1144},{"type":43,"tag":103,"props":1167,"children":1168},{"style":110},[1169],{"type":49,"value":1170},"              # joins to base_view\n",{"type":43,"tag":103,"props":1172,"children":1173},{"class":105,"line":222},[1174,1179,1183],{"type":43,"tag":103,"props":1175,"children":1176},{"style":1120},[1177],{"type":49,"value":1178},"  ecomm__inventory_items",{"type":43,"tag":103,"props":1180,"children":1181},{"style":145},[1182],{"type":49,"value":887},{"type":43,"tag":103,"props":1184,"children":1185},{"style":110},[1186],{"type":49,"value":1187},"       # joins to base_view\n",{"type":43,"tag":103,"props":1189,"children":1190},{"class":105,"line":260},[1191,1196,1200],{"type":43,"tag":103,"props":1192,"children":1193},{"style":1120},[1194],{"type":49,"value":1195},"    ecomm__products",{"type":43,"tag":103,"props":1197,"children":1198},{"style":145},[1199],{"type":49,"value":887},{"type":43,"tag":103,"props":1201,"children":1202},{"style":110},[1203],{"type":49,"value":1204},"            # joins to inventory_items\n",{"type":43,"tag":52,"props":1206,"children":1207},{},[1208,1210,1216],{"type":49,"value":1209},"Find the dimension with ",{"type":43,"tag":99,"props":1211,"children":1213},{"className":1212},[],[1214],{"type":49,"value":1215},"primary_key: true",{"type":49,"value":1217}," in each view — list it first among that table's dimensions.",{"type":43,"tag":296,"props":1219,"children":1220},{},[1221],{"type":43,"tag":52,"props":1222,"children":1223},{},[1224,1226,1230],{"type":49,"value":1225},"✋ ",{"type":43,"tag":303,"props":1227,"children":1228},{},[1229],{"type":49,"value":606},{"type":49,"value":1231}," — Confirm the full table list and join hierarchy with the user before continuing.",{"type":43,"tag":80,"props":1233,"children":1234},{},[],{"type":43,"tag":481,"props":1236,"children":1238},{"id":1237},"step-4-resolve-the-field-list",[1239],{"type":49,"value":1240},"Step 4 — Resolve the Field List",{"type":43,"tag":1006,"props":1242,"children":1243},{},[1244,1260],{"type":43,"tag":1010,"props":1245,"children":1246},{},[1247],{"type":43,"tag":1014,"props":1248,"children":1249},{},[1250,1255],{"type":43,"tag":1018,"props":1251,"children":1252},{},[1253],{"type":49,"value":1254},"Syntax",{"type":43,"tag":1018,"props":1256,"children":1257},{},[1258],{"type":49,"value":1259},"Meaning",{"type":43,"tag":1029,"props":1261,"children":1262},{},[1263,1293,1318,1335,1352],{"type":43,"tag":1014,"props":1264,"children":1265},{},[1266,1281],{"type":43,"tag":1036,"props":1267,"children":1268},{},[1269],{"type":43,"tag":356,"props":1270,"children":1271},{},[1272,1274,1279],{"type":49,"value":1273},"(no ",{"type":43,"tag":99,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":49,"value":787},{"type":49,"value":1280}," parameter)",{"type":43,"tag":1036,"props":1282,"children":1283},{},[1284,1286,1291],{"type":49,"value":1285},"Include ",{"type":43,"tag":303,"props":1287,"children":1288},{},[1289],{"type":49,"value":1290},"all",{"type":49,"value":1292}," fields from all views",{"type":43,"tag":1014,"props":1294,"children":1295},{},[1296,1313],{"type":43,"tag":1036,"props":1297,"children":1298},{},[1299,1305,1307],{"type":43,"tag":99,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":49,"value":1304},"all_views.*",{"type":49,"value":1306}," \u002F ",{"type":43,"tag":99,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":49,"value":1312},"view.*",{"type":43,"tag":1036,"props":1314,"children":1315},{},[1316],{"type":49,"value":1317},"Include all fields from all views \u002F named view",{"type":43,"tag":1014,"props":1319,"children":1320},{},[1321,1330],{"type":43,"tag":1036,"props":1322,"children":1323},{},[1324],{"type":43,"tag":99,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":49,"value":1329},"tag:\u003Cvalue>",{"type":43,"tag":1036,"props":1331,"children":1332},{},[1333],{"type":49,"value":1334},"Include all fields with this tag",{"type":43,"tag":1014,"props":1336,"children":1337},{},[1338,1347],{"type":43,"tag":1036,"props":1339,"children":1340},{},[1341],{"type":43,"tag":99,"props":1342,"children":1344},{"className":1343},[],[1345],{"type":49,"value":1346},"view.field",{"type":43,"tag":1036,"props":1348,"children":1349},{},[1350],{"type":49,"value":1351},"Include this specific field",{"type":43,"tag":1014,"props":1353,"children":1354},{},[1355,1364],{"type":43,"tag":1036,"props":1356,"children":1357},{},[1358],{"type":43,"tag":99,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":49,"value":1363},"-view.field",{"type":43,"tag":1036,"props":1365,"children":1366},{},[1367,1372],{"type":43,"tag":303,"props":1368,"children":1369},{},[1370],{"type":49,"value":1371},"Exclude",{"type":49,"value":1373}," this field (always wins over wildcard inclusions)",{"type":43,"tag":52,"props":1375,"children":1376},{},[1377,1379,1385],{"type":49,"value":1378},"Process inclusions first, then apply exclusions. Also remove any field with ",{"type":43,"tag":99,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":49,"value":1384},"hidden: true",{"type":49,"value":1386}," unless explicitly included by name.",{"type":43,"tag":80,"props":1388,"children":1389},{},[],{"type":43,"tag":481,"props":1391,"children":1393},{"id":1392},"step-5-build-join-definitions",[1394],{"type":49,"value":1395},"Step 5 — Build Join Definitions",{"type":43,"tag":52,"props":1397,"children":1398},{},[1399,1401,1407,1409,1415,1417,1423,1425,1431],{"type":49,"value":1400},"Using the hierarchy from Step 3 and ",{"type":43,"tag":99,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":49,"value":1406},"relationships.yaml",{"type":49,"value":1408},", extract join columns from ",{"type":43,"tag":99,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":49,"value":1414},"on_sql",{"type":49,"value":1416}," and build the ",{"type":43,"tag":99,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":49,"value":1422},"on:",{"type":49,"value":1424}," clause. Use the view name as the join ",{"type":43,"tag":99,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":49,"value":1430},"name",{"type":49,"value":389},{"type":43,"tag":52,"props":1433,"children":1434},{},[1435],{"type":43,"tag":303,"props":1436,"children":1437},{},[1438],{"type":49,"value":1439},"Star schema (single-level):",{"type":43,"tag":91,"props":1441,"children":1443},{"className":1108,"code":1442,"language":1110,"meta":96,"style":96},"joins:\n  - name: ecomm__users\n    source: catalog.ecomm.users\n    'on': source.user_id = ecomm__users.id\n",[1444],{"type":43,"tag":99,"props":1445,"children":1446},{"__ignoreMap":96},[1447,1458,1480,1497],{"type":43,"tag":103,"props":1448,"children":1449},{"class":105,"line":106},[1450,1454],{"type":43,"tag":103,"props":1451,"children":1452},{"style":1120},[1453],{"type":49,"value":780},{"type":43,"tag":103,"props":1455,"children":1456},{"style":145},[1457],{"type":49,"value":1127},{"type":43,"tag":103,"props":1459,"children":1460},{"class":105,"line":116},[1461,1466,1471,1475],{"type":43,"tag":103,"props":1462,"children":1463},{"style":145},[1464],{"type":49,"value":1465},"  -",{"type":43,"tag":103,"props":1467,"children":1468},{"style":1120},[1469],{"type":49,"value":1470}," name",{"type":43,"tag":103,"props":1472,"children":1473},{"style":145},[1474],{"type":49,"value":887},{"type":43,"tag":103,"props":1476,"children":1477},{"style":134},[1478],{"type":49,"value":1479}," ecomm__users\n",{"type":43,"tag":103,"props":1481,"children":1482},{"class":105,"line":30},[1483,1488,1492],{"type":43,"tag":103,"props":1484,"children":1485},{"style":1120},[1486],{"type":49,"value":1487},"    source",{"type":43,"tag":103,"props":1489,"children":1490},{"style":145},[1491],{"type":49,"value":887},{"type":43,"tag":103,"props":1493,"children":1494},{"style":134},[1495],{"type":49,"value":1496}," catalog.ecomm.users\n",{"type":43,"tag":103,"props":1498,"children":1499},{"class":105,"line":222},[1500,1505,1510,1515,1519],{"type":43,"tag":103,"props":1501,"children":1502},{"style":145},[1503],{"type":49,"value":1504},"    '",{"type":43,"tag":103,"props":1506,"children":1507},{"style":134},[1508],{"type":49,"value":1509},"on",{"type":43,"tag":103,"props":1511,"children":1512},{"style":145},[1513],{"type":49,"value":1514},"'",{"type":43,"tag":103,"props":1516,"children":1517},{"style":145},[1518],{"type":49,"value":887},{"type":43,"tag":103,"props":1520,"children":1521},{"style":134},[1522],{"type":49,"value":1523}," source.user_id = ecomm__users.id\n",{"type":43,"tag":52,"props":1525,"children":1526},{},[1527],{"type":43,"tag":303,"props":1528,"children":1529},{},[1530],{"type":49,"value":1531},"Snowflake schema (multi-hop):",{"type":43,"tag":91,"props":1533,"children":1535},{"className":1108,"code":1534,"language":1110,"meta":96,"style":96},"joins:\n  - name: ecomm__inventory_items\n    source: catalog.ecomm.inventory_items\n    'on': source.inventory_item_id = ecomm__inventory_items.id\n    joins:\n      - name: ecomm__products\n        source: catalog.ecomm.products\n        'on': ecomm__inventory_items.product_id = ecomm__products.id\n",[1536],{"type":43,"tag":99,"props":1537,"children":1538},{"__ignoreMap":96},[1539,1550,1570,1586,1610,1622,1643,1660],{"type":43,"tag":103,"props":1540,"children":1541},{"class":105,"line":106},[1542,1546],{"type":43,"tag":103,"props":1543,"children":1544},{"style":1120},[1545],{"type":49,"value":780},{"type":43,"tag":103,"props":1547,"children":1548},{"style":145},[1549],{"type":49,"value":1127},{"type":43,"tag":103,"props":1551,"children":1552},{"class":105,"line":116},[1553,1557,1561,1565],{"type":43,"tag":103,"props":1554,"children":1555},{"style":145},[1556],{"type":49,"value":1465},{"type":43,"tag":103,"props":1558,"children":1559},{"style":1120},[1560],{"type":49,"value":1470},{"type":43,"tag":103,"props":1562,"children":1563},{"style":145},[1564],{"type":49,"value":887},{"type":43,"tag":103,"props":1566,"children":1567},{"style":134},[1568],{"type":49,"value":1569}," ecomm__inventory_items\n",{"type":43,"tag":103,"props":1571,"children":1572},{"class":105,"line":30},[1573,1577,1581],{"type":43,"tag":103,"props":1574,"children":1575},{"style":1120},[1576],{"type":49,"value":1487},{"type":43,"tag":103,"props":1578,"children":1579},{"style":145},[1580],{"type":49,"value":887},{"type":43,"tag":103,"props":1582,"children":1583},{"style":134},[1584],{"type":49,"value":1585}," catalog.ecomm.inventory_items\n",{"type":43,"tag":103,"props":1587,"children":1588},{"class":105,"line":222},[1589,1593,1597,1601,1605],{"type":43,"tag":103,"props":1590,"children":1591},{"style":145},[1592],{"type":49,"value":1504},{"type":43,"tag":103,"props":1594,"children":1595},{"style":134},[1596],{"type":49,"value":1509},{"type":43,"tag":103,"props":1598,"children":1599},{"style":145},[1600],{"type":49,"value":1514},{"type":43,"tag":103,"props":1602,"children":1603},{"style":145},[1604],{"type":49,"value":887},{"type":43,"tag":103,"props":1606,"children":1607},{"style":134},[1608],{"type":49,"value":1609}," source.inventory_item_id = ecomm__inventory_items.id\n",{"type":43,"tag":103,"props":1611,"children":1612},{"class":105,"line":260},[1613,1618],{"type":43,"tag":103,"props":1614,"children":1615},{"style":1120},[1616],{"type":49,"value":1617},"    joins",{"type":43,"tag":103,"props":1619,"children":1620},{"style":145},[1621],{"type":49,"value":1127},{"type":43,"tag":103,"props":1623,"children":1624},{"class":105,"line":270},[1625,1630,1634,1638],{"type":43,"tag":103,"props":1626,"children":1627},{"style":145},[1628],{"type":49,"value":1629},"      -",{"type":43,"tag":103,"props":1631,"children":1632},{"style":1120},[1633],{"type":49,"value":1470},{"type":43,"tag":103,"props":1635,"children":1636},{"style":145},[1637],{"type":49,"value":887},{"type":43,"tag":103,"props":1639,"children":1640},{"style":134},[1641],{"type":49,"value":1642}," ecomm__products\n",{"type":43,"tag":103,"props":1644,"children":1645},{"class":105,"line":279},[1646,1651,1655],{"type":43,"tag":103,"props":1647,"children":1648},{"style":1120},[1649],{"type":49,"value":1650},"        source",{"type":43,"tag":103,"props":1652,"children":1653},{"style":145},[1654],{"type":49,"value":887},{"type":43,"tag":103,"props":1656,"children":1657},{"style":134},[1658],{"type":49,"value":1659}," catalog.ecomm.products\n",{"type":43,"tag":103,"props":1661,"children":1663},{"class":105,"line":1662},8,[1664,1669,1673,1677,1681],{"type":43,"tag":103,"props":1665,"children":1666},{"style":145},[1667],{"type":49,"value":1668},"        '",{"type":43,"tag":103,"props":1670,"children":1671},{"style":134},[1672],{"type":49,"value":1509},{"type":43,"tag":103,"props":1674,"children":1675},{"style":145},[1676],{"type":49,"value":1514},{"type":43,"tag":103,"props":1678,"children":1679},{"style":145},[1680],{"type":49,"value":887},{"type":43,"tag":103,"props":1682,"children":1683},{"style":134},[1684],{"type":49,"value":1685}," ecomm__inventory_items.product_id = ecomm__products.id\n",{"type":43,"tag":296,"props":1687,"children":1688},{},[1689],{"type":43,"tag":52,"props":1690,"children":1691},{},[1692,1693,1698,1700,1705,1707,1713,1715,1720,1722,1728],{"type":49,"value":601},{"type":43,"tag":99,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":49,"value":1509},{"type":49,"value":1699}," is a YAML 1.1 reserved word — ",{"type":43,"tag":303,"props":1701,"children":1702},{},[1703],{"type":49,"value":1704},"always single-quote the key",{"type":49,"value":1706}," as ",{"type":43,"tag":99,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":49,"value":1712},"'on':",{"type":49,"value":1714},". Columns from nested (2+ level) joins ",{"type":43,"tag":303,"props":1716,"children":1717},{},[1718],{"type":49,"value":1719},"cannot",{"type":49,"value":1721}," be used in ",{"type":43,"tag":99,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":49,"value":1727},"expr",{"type":49,"value":1729}," — flatten them through a denormalized direct join instead.",{"type":43,"tag":80,"props":1731,"children":1732},{},[],{"type":43,"tag":481,"props":1734,"children":1736},{"id":1735},"step-6-map-dimensions-and-measures",[1737],{"type":49,"value":1738},"Step 6 — Map Dimensions and Measures",{"type":43,"tag":52,"props":1740,"children":1741},{},[1742,1744,1748],{"type":49,"value":1743},"For each field that survived Step 4, translate it using the rules below. See ",{"type":43,"tag":63,"props":1745,"children":1746},{"href":65},[1747],{"type":49,"value":68},{"type":49,"value":1749}," for full examples.",{"type":43,"tag":52,"props":1751,"children":1752},{},[1753],{"type":43,"tag":303,"props":1754,"children":1755},{},[1756],{"type":49,"value":1757},"Dimension quick reference:",{"type":43,"tag":1006,"props":1759,"children":1760},{},[1761,1777],{"type":43,"tag":1010,"props":1762,"children":1763},{},[1764],{"type":43,"tag":1014,"props":1765,"children":1766},{},[1767,1772],{"type":43,"tag":1018,"props":1768,"children":1769},{},[1770],{"type":49,"value":1771},"Omni field type",{"type":43,"tag":1018,"props":1773,"children":1774},{},[1775],{"type":49,"value":1776},"Databricks translation",{"type":43,"tag":1029,"props":1778,"children":1779},{},[1780,1797,1816,1848,1871,1894,1916],{"type":43,"tag":1014,"props":1781,"children":1782},{},[1783,1788],{"type":43,"tag":1036,"props":1784,"children":1785},{},[1786],{"type":49,"value":1787},"Standard string\u002Fnumber",{"type":43,"tag":1036,"props":1789,"children":1790},{},[1791],{"type":43,"tag":99,"props":1792,"children":1794},{"className":1793},[],[1795],{"type":49,"value":1796},"expr: COLUMN",{"type":43,"tag":1014,"props":1798,"children":1799},{},[1800,1811],{"type":43,"tag":1036,"props":1801,"children":1802},{},[1803,1809],{"type":43,"tag":99,"props":1804,"children":1806},{"className":1805},[],[1807],{"type":49,"value":1808},"type: time",{"type":49,"value":1810}," (no timeframes)",{"type":43,"tag":1036,"props":1812,"children":1813},{},[1814],{"type":49,"value":1815},"Single timestamp dimension",{"type":43,"tag":1014,"props":1817,"children":1818},{},[1819,1835],{"type":43,"tag":1036,"props":1820,"children":1821},{},[1822,1827,1829],{"type":43,"tag":99,"props":1823,"children":1825},{"className":1824},[],[1826],{"type":49,"value":1808},{"type":49,"value":1828}," + ",{"type":43,"tag":99,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":49,"value":1834},"timeframes",{"type":43,"tag":1036,"props":1836,"children":1837},{},[1838,1840,1846],{"type":49,"value":1839},"One ",{"type":43,"tag":99,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":49,"value":1845},"DATE_TRUNC(...)",{"type":49,"value":1847}," dimension per timeframe",{"type":43,"tag":1014,"props":1849,"children":1850},{},[1851,1860],{"type":43,"tag":1036,"props":1852,"children":1853},{},[1854],{"type":43,"tag":99,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":49,"value":1859},"groups:",{"type":43,"tag":1036,"props":1861,"children":1862},{},[1863,1869],{"type":43,"tag":99,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":49,"value":1868},"CASE WHEN ... END",{"type":49,"value":1870}," expression",{"type":43,"tag":1014,"props":1872,"children":1873},{},[1874,1883],{"type":43,"tag":1036,"props":1875,"children":1876},{},[1877],{"type":43,"tag":99,"props":1878,"children":1880},{"className":1879},[],[1881],{"type":49,"value":1882},"bin_boundaries:",{"type":43,"tag":1036,"props":1884,"children":1885},{},[1886,1892],{"type":43,"tag":99,"props":1887,"children":1889},{"className":1888},[],[1890],{"type":49,"value":1891},"CASE WHEN",{"type":49,"value":1893}," range expression",{"type":43,"tag":1014,"props":1895,"children":1896},{},[1897,1906],{"type":43,"tag":1036,"props":1898,"children":1899},{},[1900],{"type":43,"tag":99,"props":1901,"children":1903},{"className":1902},[],[1904],{"type":49,"value":1905},"duration:",{"type":43,"tag":1036,"props":1907,"children":1908},{},[1909,1915],{"type":43,"tag":99,"props":1910,"children":1912},{"className":1911},[],[1913],{"type":49,"value":1914},"DATEDIFF(unit, start, end)",{"type":49,"value":1870},{"type":43,"tag":1014,"props":1917,"children":1918},{},[1919,1928],{"type":43,"tag":1036,"props":1920,"children":1921},{},[1922],{"type":43,"tag":99,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":49,"value":1927},"type: yesno",{"type":43,"tag":1036,"props":1929,"children":1930},{},[1931,1933,1939],{"type":49,"value":1932},"BOOLEAN dimension (not a filter; omit ",{"type":43,"tag":99,"props":1934,"children":1936},{"className":1935},[],[1937],{"type":49,"value":1938},"data_type",{"type":49,"value":516},{"type":43,"tag":52,"props":1941,"children":1942},{},[1943],{"type":43,"tag":303,"props":1944,"children":1945},{},[1946],{"type":49,"value":1947},"Measure quick reference:",{"type":43,"tag":1006,"props":1949,"children":1950},{},[1951,1966],{"type":43,"tag":1010,"props":1952,"children":1953},{},[1954],{"type":43,"tag":1014,"props":1955,"children":1956},{},[1957,1962],{"type":43,"tag":1018,"props":1958,"children":1959},{},[1960],{"type":49,"value":1961},"Omni measure type",{"type":43,"tag":1018,"props":1963,"children":1964},{},[1965],{"type":49,"value":1776},{"type":43,"tag":1029,"props":1967,"children":1968},{},[1969,1999,2020,2041,2060],{"type":43,"tag":1014,"props":1970,"children":1971},{},[1972,1981],{"type":43,"tag":1036,"props":1973,"children":1974},{},[1975],{"type":43,"tag":99,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":49,"value":1980},"aggregate_type: sum\u002Favg\u002Fmax\u002Fmin",{"type":43,"tag":1036,"props":1982,"children":1983},{},[1984,1990,1991,1997],{"type":43,"tag":99,"props":1985,"children":1987},{"className":1986},[],[1988],{"type":49,"value":1989},"SUM(col)",{"type":49,"value":1306},{"type":43,"tag":99,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":49,"value":1996},"AVG(col)",{"type":49,"value":1998}," \u002F etc.",{"type":43,"tag":1014,"props":2000,"children":2001},{},[2002,2011],{"type":43,"tag":1036,"props":2003,"children":2004},{},[2005],{"type":43,"tag":99,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":49,"value":2010},"aggregate_type: count",{"type":43,"tag":1036,"props":2012,"children":2013},{},[2014],{"type":43,"tag":99,"props":2015,"children":2017},{"className":2016},[],[2018],{"type":49,"value":2019},"COUNT(*)",{"type":43,"tag":1014,"props":2021,"children":2022},{},[2023,2032],{"type":43,"tag":1036,"props":2024,"children":2025},{},[2026],{"type":43,"tag":99,"props":2027,"children":2029},{"className":2028},[],[2030],{"type":49,"value":2031},"aggregate_type: count_distinct",{"type":43,"tag":1036,"props":2033,"children":2034},{},[2035],{"type":43,"tag":99,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":49,"value":2040},"COUNT(DISTINCT col)",{"type":43,"tag":1014,"props":2042,"children":2043},{},[2044,2049],{"type":43,"tag":1036,"props":2045,"children":2046},{},[2047],{"type":49,"value":2048},"Derived (refs other measures)",{"type":43,"tag":1036,"props":2050,"children":2051},{},[2052,2058],{"type":43,"tag":99,"props":2053,"children":2055},{"className":2054},[],[2056],{"type":49,"value":2057},"MEASURE(measure_a) op MEASURE(measure_b)",{"type":49,"value":2059}," — define atomics first",{"type":43,"tag":1014,"props":2061,"children":2062},{},[2063,2074],{"type":43,"tag":1036,"props":2064,"children":2065},{},[2066,2072],{"type":43,"tag":99,"props":2067,"children":2069},{"className":2068},[],[2070],{"type":49,"value":2071},"filters:",{"type":49,"value":2073}," on a measure",{"type":43,"tag":1036,"props":2075,"children":2076},{},[2077],{"type":43,"tag":99,"props":2078,"children":2080},{"className":2079},[],[2081],{"type":49,"value":2082},"AGG(col) FILTER (WHERE condition)",{"type":43,"tag":52,"props":2084,"children":2085},{},[2086,2088,2094,2096,2102,2104,2110,2112,2118,2119,2125,2127,2133,2135,2141,2143,2147],{"type":49,"value":2087},"Strip Omni's ",{"type":43,"tag":99,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":49,"value":2093},"${view.column}",{"type":49,"value":2095}," refs to bare column names (or ",{"type":43,"tag":99,"props":2097,"children":2099},{"className":2098},[],[2100],{"type":49,"value":2101},"join_name.column",{"type":49,"value":2103}," for joined fields). Use ",{"type":43,"tag":99,"props":2105,"children":2107},{"className":2106},[],[2108],{"type":49,"value":2109},"display_name",{"type":49,"value":2111}," for the Omni ",{"type":43,"tag":99,"props":2113,"children":2115},{"className":2114},[],[2116],{"type":49,"value":2117},"label",{"type":49,"value":774},{"type":43,"tag":99,"props":2120,"children":2122},{"className":2121},[],[2123],{"type":49,"value":2124},"comment",{"type":49,"value":2126}," for ",{"type":43,"tag":99,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":49,"value":2132},"description",{"type":49,"value":2134},", and carry ",{"type":43,"tag":99,"props":2136,"children":2138},{"className":2137},[],[2139],{"type":49,"value":2140},"synonyms",{"type":49,"value":2142}," directly. See ",{"type":43,"tag":63,"props":2144,"children":2145},{"href":73},[2146],{"type":49,"value":76},{"type":49,"value":2148}," for format and aggregate type mapping tables.",{"type":43,"tag":52,"props":2150,"children":2151},{},[2152,2154,2159,2161,2166],{"type":49,"value":2153},"If the topic has ",{"type":43,"tag":99,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":49,"value":801},{"type":49,"value":2160},", carry it into the metric view's top-level ",{"type":43,"tag":99,"props":2162,"children":2164},{"className":2163},[],[2165],{"type":49,"value":2124},{"type":49,"value":389},{"type":43,"tag":296,"props":2168,"children":2169},{},[2170],{"type":43,"tag":52,"props":2171,"children":2172},{},[2173,2174,2178],{"type":49,"value":1225},{"type":43,"tag":303,"props":2175,"children":2176},{},[2177],{"type":49,"value":606},{"type":49,"value":2179}," — Review all dimensions, measures, and join definitions with the user before generating the final output.",{"type":43,"tag":80,"props":2181,"children":2182},{},[],{"type":43,"tag":481,"props":2184,"children":2186},{"id":2185},"step-7-check-for-existing-metric-view",[2187],{"type":49,"value":2188},"Step 7 — Check for Existing Metric View",{"type":43,"tag":91,"props":2190,"children":2192},{"className":93,"code":2191,"language":95,"meta":96,"style":96},"databricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements \\\n  --json \"{\\\"warehouse_id\\\": \\\"\u003CWAREHOUSE_ID>\\\", \\\"statement\\\": \\\"SHOW VIEWS IN \u003Ccatalog>.\u003Cschema> LIKE '%_mv'\\\", \\\"wait_timeout\\\": \\\"30s\\\", \\\"catalog\\\": \\\"\u003CCATALOG>\\\", \\\"schema\\\": \\\"\u003CSCHEMA>\\\"}\"\n",[2193],{"type":43,"tag":99,"props":2194,"children":2195},{"__ignoreMap":96},[2196,2223],{"type":43,"tag":103,"props":2197,"children":2198},{"class":105,"line":106},[2199,2203,2208,2213,2218],{"type":43,"tag":103,"props":2200,"children":2201},{"style":199},[2202],{"type":49,"value":22},{"type":43,"tag":103,"props":2204,"children":2205},{"style":134},[2206],{"type":49,"value":2207}," api",{"type":43,"tag":103,"props":2209,"children":2210},{"style":134},[2211],{"type":49,"value":2212}," post",{"type":43,"tag":103,"props":2214,"children":2215},{"style":134},[2216],{"type":49,"value":2217}," \u002Fapi\u002F2.0\u002Fsql\u002Fstatements",{"type":43,"tag":103,"props":2219,"children":2220},{"style":249},[2221],{"type":49,"value":2222}," \\\n",{"type":43,"tag":103,"props":2224,"children":2225},{"class":105,"line":116},[2226,2231,2235,2240,2245,2250,2254,2259,2263,2268,2272,2276,2280,2285,2289,2293,2297,2302,2306,2310,2314,2319,2323,2327,2331,2336,2340,2344,2348,2353,2357,2361,2365,2370,2374,2378,2382,2387,2391,2395,2399,2404,2408,2413],{"type":43,"tag":103,"props":2227,"children":2228},{"style":134},[2229],{"type":49,"value":2230},"  --json",{"type":43,"tag":103,"props":2232,"children":2233},{"style":145},[2234],{"type":49,"value":168},{"type":43,"tag":103,"props":2236,"children":2237},{"style":134},[2238],{"type":49,"value":2239},"{",{"type":43,"tag":103,"props":2241,"children":2242},{"style":249},[2243],{"type":49,"value":2244},"\\\"",{"type":43,"tag":103,"props":2246,"children":2247},{"style":134},[2248],{"type":49,"value":2249},"warehouse_id",{"type":43,"tag":103,"props":2251,"children":2252},{"style":249},[2253],{"type":49,"value":2244},{"type":43,"tag":103,"props":2255,"children":2256},{"style":134},[2257],{"type":49,"value":2258},": ",{"type":43,"tag":103,"props":2260,"children":2261},{"style":249},[2262],{"type":49,"value":2244},{"type":43,"tag":103,"props":2264,"children":2265},{"style":134},[2266],{"type":49,"value":2267},"\u003CWAREHOUSE_ID>",{"type":43,"tag":103,"props":2269,"children":2270},{"style":249},[2271],{"type":49,"value":2244},{"type":43,"tag":103,"props":2273,"children":2274},{"style":134},[2275],{"type":49,"value":774},{"type":43,"tag":103,"props":2277,"children":2278},{"style":249},[2279],{"type":49,"value":2244},{"type":43,"tag":103,"props":2281,"children":2282},{"style":134},[2283],{"type":49,"value":2284},"statement",{"type":43,"tag":103,"props":2286,"children":2287},{"style":249},[2288],{"type":49,"value":2244},{"type":43,"tag":103,"props":2290,"children":2291},{"style":134},[2292],{"type":49,"value":2258},{"type":43,"tag":103,"props":2294,"children":2295},{"style":249},[2296],{"type":49,"value":2244},{"type":43,"tag":103,"props":2298,"children":2299},{"style":134},[2300],{"type":49,"value":2301},"SHOW VIEWS IN \u003Ccatalog>.\u003Cschema> LIKE '%_mv'",{"type":43,"tag":103,"props":2303,"children":2304},{"style":249},[2305],{"type":49,"value":2244},{"type":43,"tag":103,"props":2307,"children":2308},{"style":134},[2309],{"type":49,"value":774},{"type":43,"tag":103,"props":2311,"children":2312},{"style":249},[2313],{"type":49,"value":2244},{"type":43,"tag":103,"props":2315,"children":2316},{"style":134},[2317],{"type":49,"value":2318},"wait_timeout",{"type":43,"tag":103,"props":2320,"children":2321},{"style":249},[2322],{"type":49,"value":2244},{"type":43,"tag":103,"props":2324,"children":2325},{"style":134},[2326],{"type":49,"value":2258},{"type":43,"tag":103,"props":2328,"children":2329},{"style":249},[2330],{"type":49,"value":2244},{"type":43,"tag":103,"props":2332,"children":2333},{"style":134},[2334],{"type":49,"value":2335},"30s",{"type":43,"tag":103,"props":2337,"children":2338},{"style":249},[2339],{"type":49,"value":2244},{"type":43,"tag":103,"props":2341,"children":2342},{"style":134},[2343],{"type":49,"value":774},{"type":43,"tag":103,"props":2345,"children":2346},{"style":249},[2347],{"type":49,"value":2244},{"type":43,"tag":103,"props":2349,"children":2350},{"style":134},[2351],{"type":49,"value":2352},"catalog",{"type":43,"tag":103,"props":2354,"children":2355},{"style":249},[2356],{"type":49,"value":2244},{"type":43,"tag":103,"props":2358,"children":2359},{"style":134},[2360],{"type":49,"value":2258},{"type":43,"tag":103,"props":2362,"children":2363},{"style":249},[2364],{"type":49,"value":2244},{"type":43,"tag":103,"props":2366,"children":2367},{"style":134},[2368],{"type":49,"value":2369},"\u003CCATALOG>",{"type":43,"tag":103,"props":2371,"children":2372},{"style":249},[2373],{"type":49,"value":2244},{"type":43,"tag":103,"props":2375,"children":2376},{"style":134},[2377],{"type":49,"value":774},{"type":43,"tag":103,"props":2379,"children":2380},{"style":249},[2381],{"type":49,"value":2244},{"type":43,"tag":103,"props":2383,"children":2384},{"style":134},[2385],{"type":49,"value":2386},"schema",{"type":43,"tag":103,"props":2388,"children":2389},{"style":249},[2390],{"type":49,"value":2244},{"type":43,"tag":103,"props":2392,"children":2393},{"style":134},[2394],{"type":49,"value":2258},{"type":43,"tag":103,"props":2396,"children":2397},{"style":249},[2398],{"type":49,"value":2244},{"type":43,"tag":103,"props":2400,"children":2401},{"style":134},[2402],{"type":49,"value":2403},"\u003CSCHEMA>",{"type":43,"tag":103,"props":2405,"children":2406},{"style":249},[2407],{"type":49,"value":2244},{"type":43,"tag":103,"props":2409,"children":2410},{"style":134},[2411],{"type":49,"value":2412},"}",{"type":43,"tag":103,"props":2414,"children":2415},{"style":145},[2416],{"type":49,"value":178},{"type":43,"tag":2418,"props":2419,"children":2420},"ul",{},[2421,2439],{"type":43,"tag":497,"props":2422,"children":2423},{},[2424,2426,2431,2433],{"type":49,"value":2425},"View ",{"type":43,"tag":303,"props":2427,"children":2428},{},[2429],{"type":49,"value":2430},"does not exist",{"type":49,"value":2432}," → use ",{"type":43,"tag":99,"props":2434,"children":2436},{"className":2435},[],[2437],{"type":49,"value":2438},"CREATE OR REPLACE VIEW ... WITH METRICS",{"type":43,"tag":497,"props":2440,"children":2441},{},[2442,2443,2448,2449],{"type":49,"value":2425},{"type":43,"tag":303,"props":2444,"children":2445},{},[2446],{"type":49,"value":2447},"already exists",{"type":49,"value":2432},{"type":43,"tag":99,"props":2450,"children":2452},{"className":2451},[],[2453],{"type":49,"value":2454},"ALTER VIEW ... AS $$ ... $$",{"type":43,"tag":80,"props":2456,"children":2457},{},[],{"type":43,"tag":481,"props":2459,"children":2461},{"id":2460},"step-8-generate-and-execute-the-sql",[2462],{"type":49,"value":2463},"Step 8 — Generate and Execute the SQL",{"type":43,"tag":52,"props":2465,"children":2466},{},[2467],{"type":49,"value":2468},"Write the SQL to a temp file:",{"type":43,"tag":91,"props":2470,"children":2474},{"className":2471,"code":2472,"language":2473,"meta":96,"style":96},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- CREATE (new view)\nCREATE OR REPLACE VIEW catalog.schema.orders_mv\nWITH METRICS\nLANGUAGE YAML\nAS $$\nversion: 1.1\ncomment: \"...\"\nsource: catalog.ecomm.order_items\n\njoins:\n  - name: ecomm__users\n    source: catalog.ecomm.users\n    'on': source.user_id = ecomm__users.id\n\ndimensions:\n  - name: id\n    expr: id\n    display_name: \"Order ID\"\n\n  - name: status\n    expr: status\n    display_name: \"Order Status\"\n\nmeasures:\n  - name: order_count\n    expr: COUNT(*)\n    display_name: \"Order Count\"\n\n  - name: total_sale_price\n    expr: SUM(sale_price)\n    display_name: \"Total Sale Price\"\n    format:\n      type: currency\n      currency_code: USD\n$$\n","sql",[2475],{"type":43,"tag":99,"props":2476,"children":2477},{"__ignoreMap":96},[2478,2486,2494,2502,2510,2518,2526,2534,2542,2550,2559,2568,2577,2586,2594,2603,2612,2621,2630,2638,2647,2656,2665,2673,2682,2691,2700,2708,2716,2725,2734,2743,2752,2761,2770],{"type":43,"tag":103,"props":2479,"children":2480},{"class":105,"line":106},[2481],{"type":43,"tag":103,"props":2482,"children":2483},{},[2484],{"type":49,"value":2485},"-- CREATE (new view)\n",{"type":43,"tag":103,"props":2487,"children":2488},{"class":105,"line":116},[2489],{"type":43,"tag":103,"props":2490,"children":2491},{},[2492],{"type":49,"value":2493},"CREATE OR REPLACE VIEW catalog.schema.orders_mv\n",{"type":43,"tag":103,"props":2495,"children":2496},{"class":105,"line":30},[2497],{"type":43,"tag":103,"props":2498,"children":2499},{},[2500],{"type":49,"value":2501},"WITH METRICS\n",{"type":43,"tag":103,"props":2503,"children":2504},{"class":105,"line":222},[2505],{"type":43,"tag":103,"props":2506,"children":2507},{},[2508],{"type":49,"value":2509},"LANGUAGE YAML\n",{"type":43,"tag":103,"props":2511,"children":2512},{"class":105,"line":260},[2513],{"type":43,"tag":103,"props":2514,"children":2515},{},[2516],{"type":49,"value":2517},"AS $$\n",{"type":43,"tag":103,"props":2519,"children":2520},{"class":105,"line":270},[2521],{"type":43,"tag":103,"props":2522,"children":2523},{},[2524],{"type":49,"value":2525},"version: 1.1\n",{"type":43,"tag":103,"props":2527,"children":2528},{"class":105,"line":279},[2529],{"type":43,"tag":103,"props":2530,"children":2531},{},[2532],{"type":49,"value":2533},"comment: \"...\"\n",{"type":43,"tag":103,"props":2535,"children":2536},{"class":105,"line":1662},[2537],{"type":43,"tag":103,"props":2538,"children":2539},{},[2540],{"type":49,"value":2541},"source: catalog.ecomm.order_items\n",{"type":43,"tag":103,"props":2543,"children":2545},{"class":105,"line":2544},9,[2546],{"type":43,"tag":103,"props":2547,"children":2548},{"emptyLinePlaceholder":264},[2549],{"type":49,"value":267},{"type":43,"tag":103,"props":2551,"children":2553},{"class":105,"line":2552},10,[2554],{"type":43,"tag":103,"props":2555,"children":2556},{},[2557],{"type":49,"value":2558},"joins:\n",{"type":43,"tag":103,"props":2560,"children":2562},{"class":105,"line":2561},11,[2563],{"type":43,"tag":103,"props":2564,"children":2565},{},[2566],{"type":49,"value":2567},"  - name: ecomm__users\n",{"type":43,"tag":103,"props":2569,"children":2571},{"class":105,"line":2570},12,[2572],{"type":43,"tag":103,"props":2573,"children":2574},{},[2575],{"type":49,"value":2576},"    source: catalog.ecomm.users\n",{"type":43,"tag":103,"props":2578,"children":2580},{"class":105,"line":2579},13,[2581],{"type":43,"tag":103,"props":2582,"children":2583},{},[2584],{"type":49,"value":2585},"    'on': source.user_id = ecomm__users.id\n",{"type":43,"tag":103,"props":2587,"children":2589},{"class":105,"line":2588},14,[2590],{"type":43,"tag":103,"props":2591,"children":2592},{"emptyLinePlaceholder":264},[2593],{"type":49,"value":267},{"type":43,"tag":103,"props":2595,"children":2597},{"class":105,"line":2596},15,[2598],{"type":43,"tag":103,"props":2599,"children":2600},{},[2601],{"type":49,"value":2602},"dimensions:\n",{"type":43,"tag":103,"props":2604,"children":2606},{"class":105,"line":2605},16,[2607],{"type":43,"tag":103,"props":2608,"children":2609},{},[2610],{"type":49,"value":2611},"  - name: id\n",{"type":43,"tag":103,"props":2613,"children":2615},{"class":105,"line":2614},17,[2616],{"type":43,"tag":103,"props":2617,"children":2618},{},[2619],{"type":49,"value":2620},"    expr: id\n",{"type":43,"tag":103,"props":2622,"children":2624},{"class":105,"line":2623},18,[2625],{"type":43,"tag":103,"props":2626,"children":2627},{},[2628],{"type":49,"value":2629},"    display_name: \"Order ID\"\n",{"type":43,"tag":103,"props":2631,"children":2633},{"class":105,"line":2632},19,[2634],{"type":43,"tag":103,"props":2635,"children":2636},{"emptyLinePlaceholder":264},[2637],{"type":49,"value":267},{"type":43,"tag":103,"props":2639,"children":2641},{"class":105,"line":2640},20,[2642],{"type":43,"tag":103,"props":2643,"children":2644},{},[2645],{"type":49,"value":2646},"  - name: status\n",{"type":43,"tag":103,"props":2648,"children":2650},{"class":105,"line":2649},21,[2651],{"type":43,"tag":103,"props":2652,"children":2653},{},[2654],{"type":49,"value":2655},"    expr: status\n",{"type":43,"tag":103,"props":2657,"children":2659},{"class":105,"line":2658},22,[2660],{"type":43,"tag":103,"props":2661,"children":2662},{},[2663],{"type":49,"value":2664},"    display_name: \"Order Status\"\n",{"type":43,"tag":103,"props":2666,"children":2668},{"class":105,"line":2667},23,[2669],{"type":43,"tag":103,"props":2670,"children":2671},{"emptyLinePlaceholder":264},[2672],{"type":49,"value":267},{"type":43,"tag":103,"props":2674,"children":2676},{"class":105,"line":2675},24,[2677],{"type":43,"tag":103,"props":2678,"children":2679},{},[2680],{"type":49,"value":2681},"measures:\n",{"type":43,"tag":103,"props":2683,"children":2685},{"class":105,"line":2684},25,[2686],{"type":43,"tag":103,"props":2687,"children":2688},{},[2689],{"type":49,"value":2690},"  - name: order_count\n",{"type":43,"tag":103,"props":2692,"children":2694},{"class":105,"line":2693},26,[2695],{"type":43,"tag":103,"props":2696,"children":2697},{},[2698],{"type":49,"value":2699},"    expr: COUNT(*)\n",{"type":43,"tag":103,"props":2701,"children":2702},{"class":105,"line":26},[2703],{"type":43,"tag":103,"props":2704,"children":2705},{},[2706],{"type":49,"value":2707},"    display_name: \"Order Count\"\n",{"type":43,"tag":103,"props":2709,"children":2711},{"class":105,"line":2710},28,[2712],{"type":43,"tag":103,"props":2713,"children":2714},{"emptyLinePlaceholder":264},[2715],{"type":49,"value":267},{"type":43,"tag":103,"props":2717,"children":2719},{"class":105,"line":2718},29,[2720],{"type":43,"tag":103,"props":2721,"children":2722},{},[2723],{"type":49,"value":2724},"  - name: total_sale_price\n",{"type":43,"tag":103,"props":2726,"children":2728},{"class":105,"line":2727},30,[2729],{"type":43,"tag":103,"props":2730,"children":2731},{},[2732],{"type":49,"value":2733},"    expr: SUM(sale_price)\n",{"type":43,"tag":103,"props":2735,"children":2737},{"class":105,"line":2736},31,[2738],{"type":43,"tag":103,"props":2739,"children":2740},{},[2741],{"type":49,"value":2742},"    display_name: \"Total Sale Price\"\n",{"type":43,"tag":103,"props":2744,"children":2746},{"class":105,"line":2745},32,[2747],{"type":43,"tag":103,"props":2748,"children":2749},{},[2750],{"type":49,"value":2751},"    format:\n",{"type":43,"tag":103,"props":2753,"children":2755},{"class":105,"line":2754},33,[2756],{"type":43,"tag":103,"props":2757,"children":2758},{},[2759],{"type":49,"value":2760},"      type: currency\n",{"type":43,"tag":103,"props":2762,"children":2764},{"class":105,"line":2763},34,[2765],{"type":43,"tag":103,"props":2766,"children":2767},{},[2768],{"type":49,"value":2769},"      currency_code: USD\n",{"type":43,"tag":103,"props":2771,"children":2773},{"class":105,"line":2772},35,[2774],{"type":43,"tag":103,"props":2775,"children":2776},{},[2777],{"type":49,"value":2778},"$$\n",{"type":43,"tag":91,"props":2780,"children":2782},{"className":2471,"code":2781,"language":2473,"meta":96,"style":96},"-- ALTER (existing view)\nALTER VIEW catalog.schema.orders_mv AS $$\nversion: 1.1\n...\n$$\n",[2783],{"type":43,"tag":99,"props":2784,"children":2785},{"__ignoreMap":96},[2786,2794,2802,2809,2817],{"type":43,"tag":103,"props":2787,"children":2788},{"class":105,"line":106},[2789],{"type":43,"tag":103,"props":2790,"children":2791},{},[2792],{"type":49,"value":2793},"-- ALTER (existing view)\n",{"type":43,"tag":103,"props":2795,"children":2796},{"class":105,"line":116},[2797],{"type":43,"tag":103,"props":2798,"children":2799},{},[2800],{"type":49,"value":2801},"ALTER VIEW catalog.schema.orders_mv AS $$\n",{"type":43,"tag":103,"props":2803,"children":2804},{"class":105,"line":30},[2805],{"type":43,"tag":103,"props":2806,"children":2807},{},[2808],{"type":49,"value":2525},{"type":43,"tag":103,"props":2810,"children":2811},{"class":105,"line":222},[2812],{"type":43,"tag":103,"props":2813,"children":2814},{},[2815],{"type":49,"value":2816},"...\n",{"type":43,"tag":103,"props":2818,"children":2819},{"class":105,"line":260},[2820],{"type":43,"tag":103,"props":2821,"children":2822},{},[2823],{"type":49,"value":2778},{"type":43,"tag":52,"props":2825,"children":2826},{},[2827,2829,2835],{"type":49,"value":2828},"Execute via the SQL Statements API (",{"type":43,"tag":99,"props":2830,"children":2832},{"className":2831},[],[2833],{"type":49,"value":2834},"databricks sql execute",{"type":49,"value":2836}," does not exist in CLI v0.295.0+).",{"type":43,"tag":52,"props":2838,"children":2839},{},[2840,2842,2848],{"type":49,"value":2841},"Write the request body as a JSON file (with the SQL embedded as a properly-quoted string) and pass it via ",{"type":43,"tag":99,"props":2843,"children":2845},{"className":2844},[],[2846],{"type":49,"value":2847},"--json @file",{"type":49,"value":2849},". This avoids shell substitution of arbitrary SQL content into the command line:",{"type":43,"tag":91,"props":2851,"children":2853},{"className":93,"code":2852,"language":95,"meta":96,"style":96},"# \u002Ftmp\u002Forders_mv.payload.json\n{\n  \"warehouse_id\": \"\u003CWAREHOUSE_ID>\",\n  \"statement\": \"\u003CSQL with newlines as \\\\n and quotes as \\\\\\\">\",\n  \"wait_timeout\": \"50s\",\n  \"catalog\": \"\u003CCATALOG>\",\n  \"schema\": \"\u003CSCHEMA>\"\n}\n",[2854],{"type":43,"tag":99,"props":2855,"children":2856},{"__ignoreMap":96},[2857,2865,2873,2903,2951,2980,3008,3032],{"type":43,"tag":103,"props":2858,"children":2859},{"class":105,"line":106},[2860],{"type":43,"tag":103,"props":2861,"children":2862},{"style":110},[2863],{"type":49,"value":2864},"# \u002Ftmp\u002Forders_mv.payload.json\n",{"type":43,"tag":103,"props":2866,"children":2867},{"class":105,"line":116},[2868],{"type":43,"tag":103,"props":2869,"children":2870},{"style":145},[2871],{"type":49,"value":2872},"{\n",{"type":43,"tag":103,"props":2874,"children":2875},{"class":105,"line":30},[2876,2881,2885,2889,2893,2898],{"type":43,"tag":103,"props":2877,"children":2878},{"style":199},[2879],{"type":49,"value":2880},"  \"warehouse_id\"",{"type":43,"tag":103,"props":2882,"children":2883},{"style":128},[2884],{"type":49,"value":887},{"type":43,"tag":103,"props":2886,"children":2887},{"style":145},[2888],{"type":49,"value":168},{"type":43,"tag":103,"props":2890,"children":2891},{"style":134},[2892],{"type":49,"value":2267},{"type":43,"tag":103,"props":2894,"children":2895},{"style":145},[2896],{"type":49,"value":2897},"\"",{"type":43,"tag":103,"props":2899,"children":2900},{"style":134},[2901],{"type":49,"value":2902},",\n",{"type":43,"tag":103,"props":2904,"children":2905},{"class":105,"line":222},[2906,2911,2915,2919,2924,2929,2934,2939,2943,2947],{"type":43,"tag":103,"props":2907,"children":2908},{"style":199},[2909],{"type":49,"value":2910},"  \"statement\"",{"type":43,"tag":103,"props":2912,"children":2913},{"style":128},[2914],{"type":49,"value":887},{"type":43,"tag":103,"props":2916,"children":2917},{"style":145},[2918],{"type":49,"value":168},{"type":43,"tag":103,"props":2920,"children":2921},{"style":134},[2922],{"type":49,"value":2923},"\u003CSQL with newlines as ",{"type":43,"tag":103,"props":2925,"children":2926},{"style":249},[2927],{"type":49,"value":2928},"\\\\",{"type":43,"tag":103,"props":2930,"children":2931},{"style":134},[2932],{"type":49,"value":2933},"n and quotes as ",{"type":43,"tag":103,"props":2935,"children":2936},{"style":249},[2937],{"type":49,"value":2938},"\\\\\\\"",{"type":43,"tag":103,"props":2940,"children":2941},{"style":134},[2942],{"type":49,"value":734},{"type":43,"tag":103,"props":2944,"children":2945},{"style":145},[2946],{"type":49,"value":2897},{"type":43,"tag":103,"props":2948,"children":2949},{"style":134},[2950],{"type":49,"value":2902},{"type":43,"tag":103,"props":2952,"children":2953},{"class":105,"line":260},[2954,2959,2963,2967,2972,2976],{"type":43,"tag":103,"props":2955,"children":2956},{"style":199},[2957],{"type":49,"value":2958},"  \"wait_timeout\"",{"type":43,"tag":103,"props":2960,"children":2961},{"style":128},[2962],{"type":49,"value":887},{"type":43,"tag":103,"props":2964,"children":2965},{"style":145},[2966],{"type":49,"value":168},{"type":43,"tag":103,"props":2968,"children":2969},{"style":134},[2970],{"type":49,"value":2971},"50s",{"type":43,"tag":103,"props":2973,"children":2974},{"style":145},[2975],{"type":49,"value":2897},{"type":43,"tag":103,"props":2977,"children":2978},{"style":134},[2979],{"type":49,"value":2902},{"type":43,"tag":103,"props":2981,"children":2982},{"class":105,"line":270},[2983,2988,2992,2996,3000,3004],{"type":43,"tag":103,"props":2984,"children":2985},{"style":199},[2986],{"type":49,"value":2987},"  \"catalog\"",{"type":43,"tag":103,"props":2989,"children":2990},{"style":128},[2991],{"type":49,"value":887},{"type":43,"tag":103,"props":2993,"children":2994},{"style":145},[2995],{"type":49,"value":168},{"type":43,"tag":103,"props":2997,"children":2998},{"style":134},[2999],{"type":49,"value":2369},{"type":43,"tag":103,"props":3001,"children":3002},{"style":145},[3003],{"type":49,"value":2897},{"type":43,"tag":103,"props":3005,"children":3006},{"style":134},[3007],{"type":49,"value":2902},{"type":43,"tag":103,"props":3009,"children":3010},{"class":105,"line":279},[3011,3016,3020,3024,3028],{"type":43,"tag":103,"props":3012,"children":3013},{"style":199},[3014],{"type":49,"value":3015},"  \"schema\"",{"type":43,"tag":103,"props":3017,"children":3018},{"style":128},[3019],{"type":49,"value":887},{"type":43,"tag":103,"props":3021,"children":3022},{"style":145},[3023],{"type":49,"value":168},{"type":43,"tag":103,"props":3025,"children":3026},{"style":134},[3027],{"type":49,"value":2403},{"type":43,"tag":103,"props":3029,"children":3030},{"style":145},[3031],{"type":49,"value":178},{"type":43,"tag":103,"props":3033,"children":3034},{"class":105,"line":1662},[3035],{"type":43,"tag":103,"props":3036,"children":3037},{"style":145},[3038],{"type":49,"value":3039},"}\n",{"type":43,"tag":91,"props":3041,"children":3043},{"className":93,"code":3042,"language":95,"meta":96,"style":96},"databricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements --json @\u002Ftmp\u002Forders_mv.payload.json\n",[3044],{"type":43,"tag":99,"props":3045,"children":3046},{"__ignoreMap":96},[3047],{"type":43,"tag":103,"props":3048,"children":3049},{"class":105,"line":106},[3050,3054,3058,3062,3066,3071],{"type":43,"tag":103,"props":3051,"children":3052},{"style":199},[3053],{"type":49,"value":22},{"type":43,"tag":103,"props":3055,"children":3056},{"style":134},[3057],{"type":49,"value":2207},{"type":43,"tag":103,"props":3059,"children":3060},{"style":134},[3061],{"type":49,"value":2212},{"type":43,"tag":103,"props":3063,"children":3064},{"style":134},[3065],{"type":49,"value":2217},{"type":43,"tag":103,"props":3067,"children":3068},{"style":134},[3069],{"type":49,"value":3070}," --json",{"type":43,"tag":103,"props":3072,"children":3073},{"style":134},[3074],{"type":49,"value":3075}," @\u002Ftmp\u002Forders_mv.payload.json\n",{"type":43,"tag":52,"props":3077,"children":3078},{},[3079,3081,3087,3088,3094,3096,3102],{"type":49,"value":3080},"Check the response for ",{"type":43,"tag":99,"props":3082,"children":3084},{"className":3083},[],[3085],{"type":49,"value":3086},"\"state\": \"SUCCEEDED\"",{"type":49,"value":323},{"type":43,"tag":99,"props":3089,"children":3091},{"className":3090},[],[3092],{"type":49,"value":3093},"\"state\": \"FAILED\"",{"type":49,"value":3095},", read ",{"type":43,"tag":99,"props":3097,"children":3099},{"className":3098},[],[3100],{"type":49,"value":3101},"status.error.message",{"type":49,"value":3103}," and see the Troubleshooting section below.",{"type":43,"tag":296,"props":3105,"children":3106},{},[3107],{"type":43,"tag":52,"props":3108,"children":3109},{},[3110,3111,3115],{"type":49,"value":1225},{"type":43,"tag":303,"props":3112,"children":3113},{},[3114],{"type":49,"value":606},{"type":49,"value":3116}," — Confirm which group or user should receive access before running the GRANT. This is a permission change visible to others.",{"type":43,"tag":52,"props":3118,"children":3119},{},[3120],{"type":49,"value":3121},"Grant access:",{"type":43,"tag":91,"props":3123,"children":3125},{"className":93,"code":3124,"language":95,"meta":96,"style":96},"databricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements \\\n  --json \"{\\\"warehouse_id\\\": \\\"\u003CWAREHOUSE_ID>\\\", \\\"statement\\\": \\\"GRANT SELECT ON VIEW catalog.schema.orders_mv TO \\`group_name\\`\\\", \\\"wait_timeout\\\": \\\"30s\\\", \\\"catalog\\\": \\\"\u003CCATALOG>\\\", \\\"schema\\\": \\\"\u003CSCHEMA>\\\"}\"\n",[3126],{"type":43,"tag":99,"props":3127,"children":3128},{"__ignoreMap":96},[3129,3152],{"type":43,"tag":103,"props":3130,"children":3131},{"class":105,"line":106},[3132,3136,3140,3144,3148],{"type":43,"tag":103,"props":3133,"children":3134},{"style":199},[3135],{"type":49,"value":22},{"type":43,"tag":103,"props":3137,"children":3138},{"style":134},[3139],{"type":49,"value":2207},{"type":43,"tag":103,"props":3141,"children":3142},{"style":134},[3143],{"type":49,"value":2212},{"type":43,"tag":103,"props":3145,"children":3146},{"style":134},[3147],{"type":49,"value":2217},{"type":43,"tag":103,"props":3149,"children":3150},{"style":249},[3151],{"type":49,"value":2222},{"type":43,"tag":103,"props":3153,"children":3154},{"class":105,"line":116},[3155,3159,3163,3167,3171,3175,3179,3183,3187,3191,3195,3199,3203,3207,3211,3215,3219,3224,3229,3234,3239,3243,3247,3251,3255,3259,3263,3267,3271,3275,3279,3283,3287,3291,3295,3299,3303,3307,3311,3315,3319,3323,3327,3331,3335,3339],{"type":43,"tag":103,"props":3156,"children":3157},{"style":134},[3158],{"type":49,"value":2230},{"type":43,"tag":103,"props":3160,"children":3161},{"style":145},[3162],{"type":49,"value":168},{"type":43,"tag":103,"props":3164,"children":3165},{"style":134},[3166],{"type":49,"value":2239},{"type":43,"tag":103,"props":3168,"children":3169},{"style":249},[3170],{"type":49,"value":2244},{"type":43,"tag":103,"props":3172,"children":3173},{"style":134},[3174],{"type":49,"value":2249},{"type":43,"tag":103,"props":3176,"children":3177},{"style":249},[3178],{"type":49,"value":2244},{"type":43,"tag":103,"props":3180,"children":3181},{"style":134},[3182],{"type":49,"value":2258},{"type":43,"tag":103,"props":3184,"children":3185},{"style":249},[3186],{"type":49,"value":2244},{"type":43,"tag":103,"props":3188,"children":3189},{"style":134},[3190],{"type":49,"value":2267},{"type":43,"tag":103,"props":3192,"children":3193},{"style":249},[3194],{"type":49,"value":2244},{"type":43,"tag":103,"props":3196,"children":3197},{"style":134},[3198],{"type":49,"value":774},{"type":43,"tag":103,"props":3200,"children":3201},{"style":249},[3202],{"type":49,"value":2244},{"type":43,"tag":103,"props":3204,"children":3205},{"style":134},[3206],{"type":49,"value":2284},{"type":43,"tag":103,"props":3208,"children":3209},{"style":249},[3210],{"type":49,"value":2244},{"type":43,"tag":103,"props":3212,"children":3213},{"style":134},[3214],{"type":49,"value":2258},{"type":43,"tag":103,"props":3216,"children":3217},{"style":249},[3218],{"type":49,"value":2244},{"type":43,"tag":103,"props":3220,"children":3221},{"style":134},[3222],{"type":49,"value":3223},"GRANT SELECT ON VIEW catalog.schema.orders_mv TO ",{"type":43,"tag":103,"props":3225,"children":3226},{"style":249},[3227],{"type":49,"value":3228},"\\`",{"type":43,"tag":103,"props":3230,"children":3231},{"style":134},[3232],{"type":49,"value":3233},"group_name",{"type":43,"tag":103,"props":3235,"children":3236},{"style":249},[3237],{"type":49,"value":3238},"\\`\\\"",{"type":43,"tag":103,"props":3240,"children":3241},{"style":134},[3242],{"type":49,"value":774},{"type":43,"tag":103,"props":3244,"children":3245},{"style":249},[3246],{"type":49,"value":2244},{"type":43,"tag":103,"props":3248,"children":3249},{"style":134},[3250],{"type":49,"value":2318},{"type":43,"tag":103,"props":3252,"children":3253},{"style":249},[3254],{"type":49,"value":2244},{"type":43,"tag":103,"props":3256,"children":3257},{"style":134},[3258],{"type":49,"value":2258},{"type":43,"tag":103,"props":3260,"children":3261},{"style":249},[3262],{"type":49,"value":2244},{"type":43,"tag":103,"props":3264,"children":3265},{"style":134},[3266],{"type":49,"value":2335},{"type":43,"tag":103,"props":3268,"children":3269},{"style":249},[3270],{"type":49,"value":2244},{"type":43,"tag":103,"props":3272,"children":3273},{"style":134},[3274],{"type":49,"value":774},{"type":43,"tag":103,"props":3276,"children":3277},{"style":249},[3278],{"type":49,"value":2244},{"type":43,"tag":103,"props":3280,"children":3281},{"style":134},[3282],{"type":49,"value":2352},{"type":43,"tag":103,"props":3284,"children":3285},{"style":249},[3286],{"type":49,"value":2244},{"type":43,"tag":103,"props":3288,"children":3289},{"style":134},[3290],{"type":49,"value":2258},{"type":43,"tag":103,"props":3292,"children":3293},{"style":249},[3294],{"type":49,"value":2244},{"type":43,"tag":103,"props":3296,"children":3297},{"style":134},[3298],{"type":49,"value":2369},{"type":43,"tag":103,"props":3300,"children":3301},{"style":249},[3302],{"type":49,"value":2244},{"type":43,"tag":103,"props":3304,"children":3305},{"style":134},[3306],{"type":49,"value":774},{"type":43,"tag":103,"props":3308,"children":3309},{"style":249},[3310],{"type":49,"value":2244},{"type":43,"tag":103,"props":3312,"children":3313},{"style":134},[3314],{"type":49,"value":2386},{"type":43,"tag":103,"props":3316,"children":3317},{"style":249},[3318],{"type":49,"value":2244},{"type":43,"tag":103,"props":3320,"children":3321},{"style":134},[3322],{"type":49,"value":2258},{"type":43,"tag":103,"props":3324,"children":3325},{"style":249},[3326],{"type":49,"value":2244},{"type":43,"tag":103,"props":3328,"children":3329},{"style":134},[3330],{"type":49,"value":2403},{"type":43,"tag":103,"props":3332,"children":3333},{"style":249},[3334],{"type":49,"value":2244},{"type":43,"tag":103,"props":3336,"children":3337},{"style":134},[3338],{"type":49,"value":2412},{"type":43,"tag":103,"props":3340,"children":3341},{"style":145},[3342],{"type":49,"value":178},{"type":43,"tag":80,"props":3344,"children":3345},{},[],{"type":43,"tag":84,"props":3347,"children":3349},{"id":3348},"troubleshooting",[3350],{"type":49,"value":3351},"Troubleshooting",{"type":43,"tag":52,"props":3353,"children":3354},{},[3355,3357,3362,3363,3368],{"type":49,"value":3356},"When the SQL Statements API returns ",{"type":43,"tag":99,"props":3358,"children":3360},{"className":3359},[],[3361],{"type":49,"value":3093},{"type":49,"value":3095},{"type":43,"tag":99,"props":3364,"children":3366},{"className":3365},[],[3367],{"type":49,"value":3101},{"type":49,"value":887},{"type":43,"tag":1006,"props":3370,"children":3371},{},[3372,3393],{"type":43,"tag":1010,"props":3373,"children":3374},{},[3375],{"type":43,"tag":1014,"props":3376,"children":3377},{},[3378,3383,3388],{"type":43,"tag":1018,"props":3379,"children":3380},{},[3381],{"type":49,"value":3382},"Error message contains",{"type":43,"tag":1018,"props":3384,"children":3385},{},[3386],{"type":49,"value":3387},"Likely cause",{"type":43,"tag":1018,"props":3389,"children":3390},{},[3391],{"type":49,"value":3392},"Fix",{"type":43,"tag":1029,"props":3394,"children":3395},{},[3396,3477,3513,3542,3571,3606],{"type":43,"tag":1014,"props":3397,"children":3398},{},[3399,3408,3413],{"type":43,"tag":1036,"props":3400,"children":3401},{},[3402],{"type":43,"tag":99,"props":3403,"children":3405},{"className":3404},[],[3406],{"type":49,"value":3407},"METRIC_VIEW_INVALID_VIEW_DEFINITION",{"type":43,"tag":1036,"props":3409,"children":3410},{},[3411],{"type":49,"value":3412},"Invalid YAML field or value",{"type":43,"tag":1036,"props":3414,"children":3415},{},[3416,3418,3423,3424,3429,3430,3435,3436,3441,3442,3447,3448,3454,3456,3461,3463,3468,3470,3476],{"type":49,"value":3417},"Check the field name against the valid keys (",{"type":43,"tag":99,"props":3419,"children":3421},{"className":3420},[],[3422],{"type":49,"value":1430},{"type":49,"value":774},{"type":43,"tag":99,"props":3425,"children":3427},{"className":3426},[],[3428],{"type":49,"value":1727},{"type":49,"value":774},{"type":43,"tag":99,"props":3431,"children":3433},{"className":3432},[],[3434],{"type":49,"value":2109},{"type":49,"value":774},{"type":43,"tag":99,"props":3437,"children":3439},{"className":3438},[],[3440],{"type":49,"value":2124},{"type":49,"value":774},{"type":43,"tag":99,"props":3443,"children":3445},{"className":3444},[],[3446],{"type":49,"value":2140},{"type":49,"value":774},{"type":43,"tag":99,"props":3449,"children":3451},{"className":3450},[],[3452],{"type":49,"value":3453},"format",{"type":49,"value":3455},"). Common mistakes: using ",{"type":43,"tag":99,"props":3457,"children":3459},{"className":3458},[],[3460],{"type":49,"value":2132},{"type":49,"value":3462}," instead of ",{"type":43,"tag":99,"props":3464,"children":3466},{"className":3465},[],[3467],{"type":49,"value":2124},{"type":49,"value":3469},", unsupported ",{"type":43,"tag":99,"props":3471,"children":3473},{"className":3472},[],[3474],{"type":49,"value":3475},"decimal_places",{"type":49,"value":389},{"type":43,"tag":1014,"props":3478,"children":3479},{},[3480,3496,3501],{"type":43,"tag":1036,"props":3481,"children":3482},{},[3483,3489,3490],{"type":43,"tag":99,"props":3484,"children":3486},{"className":3485},[],[3487],{"type":49,"value":3488},"warehouse not running",{"type":49,"value":1306},{"type":43,"tag":99,"props":3491,"children":3493},{"className":3492},[],[3494],{"type":49,"value":3495},"RESOURCE_DOES_NOT_EXIST",{"type":43,"tag":1036,"props":3497,"children":3498},{},[3499],{"type":49,"value":3500},"Warehouse is stopped or wrong ID",{"type":43,"tag":1036,"props":3502,"children":3503},{},[3504,3506,3512],{"type":49,"value":3505},"Start the warehouse in the Databricks UI or verify the ID with ",{"type":43,"tag":99,"props":3507,"children":3509},{"className":3508},[],[3510],{"type":49,"value":3511},"databricks api get \u002Fapi\u002F2.0\u002Fsql\u002Fwarehouses",{"type":49,"value":389},{"type":43,"tag":1014,"props":3514,"children":3515},{},[3516,3525,3530],{"type":43,"tag":1036,"props":3517,"children":3518},{},[3519],{"type":43,"tag":99,"props":3520,"children":3522},{"className":3521},[],[3523],{"type":49,"value":3524},"PERMISSION_DENIED",{"type":43,"tag":1036,"props":3526,"children":3527},{},[3528],{"type":49,"value":3529},"The CLI profile lacks privileges",{"type":43,"tag":1036,"props":3531,"children":3532},{},[3533,3535,3541],{"type":49,"value":3534},"Check the profile's permissions on the catalog\u002Fschema with ",{"type":43,"tag":99,"props":3536,"children":3538},{"className":3537},[],[3539],{"type":49,"value":3540},"databricks api get \u002Fapi\u002F2.0\u002Funity-catalog\u002Fpermissions\u002F...",{"type":49,"value":389},{"type":43,"tag":1014,"props":3543,"children":3544},{},[3545,3554,3559],{"type":43,"tag":1036,"props":3546,"children":3547},{},[3548],{"type":43,"tag":99,"props":3549,"children":3551},{"className":3550},[],[3552],{"type":49,"value":3553},"TABLE_OR_VIEW_NOT_FOUND",{"type":43,"tag":1036,"props":3555,"children":3556},{},[3557],{"type":49,"value":3558},"A source or join table doesn't exist in Unity Catalog",{"type":43,"tag":1036,"props":3560,"children":3561},{},[3562,3564,3570],{"type":49,"value":3563},"Verify each table reference with ",{"type":43,"tag":99,"props":3565,"children":3567},{"className":3566},[],[3568],{"type":49,"value":3569},"SHOW TABLES IN \u003Ccatalog>.\u003Cschema>",{"type":49,"value":389},{"type":43,"tag":1014,"props":3572,"children":3573},{},[3574,3584,3594],{"type":43,"tag":1036,"props":3575,"children":3576},{},[3577,3582],{"type":43,"tag":99,"props":3578,"children":3580},{"className":3579},[],[3581],{"type":49,"value":1509},{"type":49,"value":3583}," parse error \u002F unexpected key",{"type":43,"tag":1036,"props":3585,"children":3586},{},[3587,3592],{"type":43,"tag":99,"props":3588,"children":3590},{"className":3589},[],[3591],{"type":49,"value":1422},{"type":49,"value":3593}," not quoted",{"type":43,"tag":1036,"props":3595,"children":3596},{},[3597,3599,3604],{"type":49,"value":3598},"Always write ",{"type":43,"tag":99,"props":3600,"children":3602},{"className":3601},[],[3603],{"type":49,"value":1712},{"type":49,"value":3605}," (single-quoted) — it is a YAML 1.1 reserved word.",{"type":43,"tag":1014,"props":3607,"children":3608},{},[3609,3619,3624],{"type":43,"tag":1036,"props":3610,"children":3611},{},[3612,3617],{"type":43,"tag":99,"props":3613,"children":3615},{"className":3614},[],[3616],{"type":49,"value":2318},{"type":49,"value":3618}," value error",{"type":43,"tag":1036,"props":3620,"children":3621},{},[3622],{"type":49,"value":3623},"Timeout out of range",{"type":43,"tag":1036,"props":3625,"children":3626},{},[3627,3632,3634,3640,3641,3646],{"type":43,"tag":99,"props":3628,"children":3630},{"className":3629},[],[3631],{"type":49,"value":2318},{"type":49,"value":3633}," must be between ",{"type":43,"tag":99,"props":3635,"children":3637},{"className":3636},[],[3638],{"type":49,"value":3639},"5s",{"type":49,"value":880},{"type":43,"tag":99,"props":3642,"children":3644},{"className":3643},[],[3645],{"type":49,"value":2971},{"type":49,"value":389},{"type":43,"tag":52,"props":3648,"children":3649},{},[3650,3652,3658],{"type":49,"value":3651},"If the error message is truncated, run the same statement with ",{"type":43,"tag":99,"props":3653,"children":3655},{"className":3654},[],[3656],{"type":49,"value":3657},"\"wait_timeout\": \"5s\"",{"type":49,"value":3659}," to get the full synchronous error response.",{"type":43,"tag":80,"props":3661,"children":3662},{},[],{"type":43,"tag":84,"props":3664,"children":3666},{"id":3665},"critical-rules",[3667],{"type":49,"value":3668},"Critical Rules",{"type":43,"tag":493,"props":3670,"children":3671},{},[3672,3689,3715,3733,3750,3760,3784,3801,3824,3834,3852,3869,3879,3895,3945,3975,3998,4013,4049,4073],{"type":43,"tag":497,"props":3673,"children":3674},{},[3675,3680,3682,3687],{"type":43,"tag":303,"props":3676,"children":3677},{},[3678],{"type":49,"value":3679},"Naming",{"type":49,"value":3681},": Name the metric view ",{"type":43,"tag":99,"props":3683,"children":3685},{"className":3684},[],[3686],{"type":49,"value":614},{"type":49,"value":3688}," (snake_case, lowercase)",{"type":43,"tag":497,"props":3690,"children":3691},{},[3692,3697,3699,3705,3707,3713],{"type":43,"tag":303,"props":3693,"children":3694},{},[3695],{"type":49,"value":3696},"CREATE vs ALTER",{"type":49,"value":3698},": Check for existence first — ",{"type":43,"tag":99,"props":3700,"children":3702},{"className":3701},[],[3703],{"type":49,"value":3704},"CREATE OR REPLACE",{"type":49,"value":3706}," for new, ",{"type":43,"tag":99,"props":3708,"children":3710},{"className":3709},[],[3711],{"type":49,"value":3712},"ALTER VIEW",{"type":49,"value":3714}," for existing",{"type":43,"tag":497,"props":3716,"children":3717},{},[3718,3723,3725,3731],{"type":43,"tag":303,"props":3719,"children":3720},{},[3721],{"type":49,"value":3722},"Version",{"type":49,"value":3724},": Always use ",{"type":43,"tag":99,"props":3726,"children":3728},{"className":3727},[],[3729],{"type":49,"value":3730},"version: 1.1",{"type":49,"value":3732}," (requires Databricks Runtime 17.2+)",{"type":43,"tag":497,"props":3734,"children":3735},{},[3736,3741,3743,3748],{"type":43,"tag":303,"props":3737,"children":3738},{},[3739],{"type":49,"value":3740},"Skip derived CTEs",{"type":49,"value":3742},": Views with ",{"type":43,"tag":99,"props":3744,"children":3746},{"className":3745},[],[3747],{"type":49,"value":980},{"type":49,"value":3749}," have no physical table — skip and warn the user",{"type":43,"tag":497,"props":3751,"children":3752},{},[3753,3758],{"type":43,"tag":303,"props":3754,"children":3755},{},[3756],{"type":49,"value":3757},"Confirm before executing",{"type":49,"value":3759},": Show the full generated SQL to the user before running",{"type":43,"tag":497,"props":3761,"children":3762},{},[3763,3768,3770,3775,3777,3782],{"type":43,"tag":303,"props":3764,"children":3765},{},[3766],{"type":49,"value":3767},"Boolean fields",{"type":49,"value":3769},": Map ",{"type":43,"tag":99,"props":3771,"children":3773},{"className":3772},[],[3774],{"type":49,"value":1927},{"type":49,"value":3776}," as BOOLEAN dimensions — not filters. ",{"type":43,"tag":99,"props":3778,"children":3780},{"className":3779},[],[3781],{"type":49,"value":1938},{"type":49,"value":3783}," is not a valid field — omit it",{"type":43,"tag":497,"props":3785,"children":3786},{},[3787,3792,3793,3799],{"type":43,"tag":303,"props":3788,"children":3789},{},[3790],{"type":49,"value":3791},"Composed measures",{"type":49,"value":449},{"type":43,"tag":99,"props":3794,"children":3796},{"className":3795},[],[3797],{"type":49,"value":3798},"MEASURE()",{"type":49,"value":3800}," syntax; define atomic measures before composed ones",{"type":43,"tag":497,"props":3802,"children":3803},{},[3804,3809,3810,3815,3817,3822],{"type":43,"tag":303,"props":3805,"children":3806},{},[3807],{"type":49,"value":3808},"YAML quoting",{"type":49,"value":2258},{"type":43,"tag":99,"props":3811,"children":3813},{"className":3812},[],[3814],{"type":49,"value":1509},{"type":49,"value":3816}," is a YAML 1.1 reserved word — always write ",{"type":43,"tag":99,"props":3818,"children":3820},{"className":3819},[],[3821],{"type":49,"value":1712},{"type":49,"value":3823}," (single-quoted)",{"type":43,"tag":497,"props":3825,"children":3826},{},[3827,3832],{"type":43,"tag":303,"props":3828,"children":3829},{},[3830],{"type":49,"value":3831},"No SELECT *",{"type":49,"value":3833},": All fields must be explicitly defined",{"type":43,"tag":497,"props":3835,"children":3836},{},[3837,3842,3844,3850],{"type":43,"tag":303,"props":3838,"children":3839},{},[3840],{"type":49,"value":3841},"MAP columns",{"type":49,"value":3843},": Skip joins to tables containing ",{"type":43,"tag":99,"props":3845,"children":3847},{"className":3846},[],[3848],{"type":49,"value":3849},"MAP",{"type":49,"value":3851}," type columns — not supported",{"type":43,"tag":497,"props":3853,"children":3854},{},[3855,3860,3862,3867],{"type":43,"tag":303,"props":3856,"children":3857},{},[3858],{"type":49,"value":3859},"Nested join refs",{"type":49,"value":3861},": Only direct star join columns (1 level) can be used in ",{"type":43,"tag":99,"props":3863,"children":3865},{"className":3864},[],[3866],{"type":49,"value":1727},{"type":49,"value":3868},". Flatten snowflake schema joins through a denormalized direct join",{"type":43,"tag":497,"props":3870,"children":3871},{},[3872,3877],{"type":43,"tag":303,"props":3873,"children":3874},{},[3875],{"type":49,"value":3876},"Warehouse ID required",{"type":49,"value":3878},": Always confirm before execution — cannot be inferred",{"type":43,"tag":497,"props":3880,"children":3881},{},[3882,3887,3888,3893],{"type":43,"tag":303,"props":3883,"children":3884},{},[3885],{"type":49,"value":3886},"Exclusions win",{"type":49,"value":2258},{"type":43,"tag":99,"props":3889,"children":3891},{"className":3890},[],[3892],{"type":49,"value":1363},{"type":49,"value":3894}," always overrides any wildcard inclusion",{"type":43,"tag":497,"props":3896,"children":3897},{},[3898,3903,3904,3910,3911,3917,3918,3924,3925,3931,3932,3938,3939],{"type":43,"tag":303,"props":3899,"children":3900},{},[3901],{"type":49,"value":3902},"Format type values are lowercase",{"type":49,"value":2258},{"type":43,"tag":99,"props":3905,"children":3907},{"className":3906},[],[3908],{"type":49,"value":3909},"number",{"type":49,"value":774},{"type":43,"tag":99,"props":3912,"children":3914},{"className":3913},[],[3915],{"type":49,"value":3916},"currency",{"type":49,"value":774},{"type":43,"tag":99,"props":3919,"children":3921},{"className":3920},[],[3922],{"type":49,"value":3923},"date",{"type":49,"value":774},{"type":43,"tag":99,"props":3926,"children":3928},{"className":3927},[],[3929],{"type":49,"value":3930},"date_time",{"type":49,"value":774},{"type":43,"tag":99,"props":3933,"children":3935},{"className":3934},[],[3936],{"type":49,"value":3937},"percentage",{"type":49,"value":774},{"type":43,"tag":99,"props":3940,"children":3942},{"className":3941},[],[3943],{"type":49,"value":3944},"byte",{"type":43,"tag":497,"props":3946,"children":3947},{},[3948,3953,3954,3960,3961,3967,3969],{"type":43,"tag":303,"props":3949,"children":3950},{},[3951],{"type":49,"value":3952},"Date format required",{"type":49,"value":2258},{"type":43,"tag":99,"props":3955,"children":3957},{"className":3956},[],[3958],{"type":49,"value":3959},"type: date",{"type":49,"value":880},{"type":43,"tag":99,"props":3962,"children":3964},{"className":3963},[],[3965],{"type":49,"value":3966},"type: date_time",{"type":49,"value":3968}," both require ",{"type":43,"tag":99,"props":3970,"children":3972},{"className":3971},[],[3973],{"type":49,"value":3974},"date_format",{"type":43,"tag":497,"props":3976,"children":3977},{},[3978,3983,3984,3990,3992],{"type":43,"tag":303,"props":3979,"children":3980},{},[3981],{"type":49,"value":3982},"Currency format",{"type":49,"value":449},{"type":43,"tag":99,"props":3985,"children":3987},{"className":3986},[],[3988],{"type":49,"value":3989},"currency_code: USD",{"type":49,"value":3991}," not ",{"type":43,"tag":99,"props":3993,"children":3995},{"className":3994},[],[3996],{"type":49,"value":3997},"iso_code: USD",{"type":43,"tag":497,"props":3999,"children":4000},{},[4001,4011],{"type":43,"tag":303,"props":4002,"children":4003},{},[4004,4009],{"type":43,"tag":99,"props":4005,"children":4007},{"className":4006},[],[4008],{"type":49,"value":3475},{"type":49,"value":4010}," unsupported",{"type":49,"value":4012},": Omit it entirely — causes a parse error",{"type":43,"tag":497,"props":4014,"children":4015},{},[4016,4021,4022,4028,4030,4035,4037,4042,4044],{"type":43,"tag":303,"props":4017,"children":4018},{},[4019],{"type":49,"value":4020},"CLI execution",{"type":49,"value":449},{"type":43,"tag":99,"props":4023,"children":4025},{"className":4024},[],[4026],{"type":49,"value":4027},"databricks api post \u002Fapi\u002F2.0\u002Fsql\u002Fstatements",{"type":49,"value":4029},"; ",{"type":43,"tag":99,"props":4031,"children":4033},{"className":4032},[],[4034],{"type":49,"value":2318},{"type":49,"value":4036}," must be ",{"type":43,"tag":99,"props":4038,"children":4040},{"className":4039},[],[4041],{"type":49,"value":3639},{"type":49,"value":4043},"–",{"type":43,"tag":99,"props":4045,"children":4047},{"className":4046},[],[4048],{"type":49,"value":2971},{"type":43,"tag":497,"props":4050,"children":4051},{},[4052,4057,4058,4064,4066,4072],{"type":43,"tag":303,"props":4053,"children":4054},{},[4055],{"type":49,"value":4056},"Omni CLI flag",{"type":49,"value":449},{"type":43,"tag":99,"props":4059,"children":4061},{"className":4060},[],[4062],{"type":49,"value":4063},"--filename",{"type":49,"value":4065}," (not ",{"type":43,"tag":99,"props":4067,"children":4069},{"className":4068},[],[4070],{"type":49,"value":4071},"--file-name",{"type":49,"value":516},{"type":43,"tag":497,"props":4074,"children":4075},{},[4076,4081,4082,4088,4089,4095,4097,4102],{"type":43,"tag":303,"props":4077,"children":4078},{},[4079],{"type":49,"value":4080},"Field description key",{"type":49,"value":449},{"type":43,"tag":99,"props":4083,"children":4085},{"className":4084},[],[4086],{"type":49,"value":4087},"comment:",{"type":49,"value":3991},{"type":43,"tag":99,"props":4090,"children":4092},{"className":4091},[],[4093],{"type":49,"value":4094},"description:",{"type":49,"value":4096}," — ",{"type":43,"tag":99,"props":4098,"children":4100},{"className":4099},[],[4101],{"type":49,"value":2132},{"type":49,"value":4103}," is not a recognized field and causes a parse error",{"type":43,"tag":80,"props":4105,"children":4106},{},[],{"type":43,"tag":84,"props":4108,"children":4110},{"id":4109},"reference",[4111],{"type":49,"value":4112},"Reference",{"type":43,"tag":2418,"props":4114,"children":4115},{},[4116,4127,4137,4147,4157,4167],{"type":43,"tag":497,"props":4117,"children":4118},{},[4119],{"type":43,"tag":63,"props":4120,"children":4124},{"href":4121,"rel":4122},"https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002F",[4123],"nofollow",[4125],{"type":49,"value":4126},"Databricks Metric Views overview",{"type":43,"tag":497,"props":4128,"children":4129},{},[4130],{"type":43,"tag":63,"props":4131,"children":4134},{"href":4132,"rel":4133},"https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fcreate\u002Fsql",[4123],[4135],{"type":49,"value":4136},"Create a metric view with SQL",{"type":43,"tag":497,"props":4138,"children":4139},{},[4140],{"type":43,"tag":63,"props":4141,"children":4144},{"href":4142,"rel":4143},"https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fsyntax",[4123],[4145],{"type":49,"value":4146},"Metric view syntax reference",{"type":43,"tag":497,"props":4148,"children":4149},{},[4150],{"type":43,"tag":63,"props":4151,"children":4154},{"href":4152,"rel":4153},"https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fsemantic-metadata",[4123],[4155],{"type":49,"value":4156},"Semantic metadata",{"type":43,"tag":497,"props":4158,"children":4159},{},[4160],{"type":43,"tag":63,"props":4161,"children":4164},{"href":4162,"rel":4163},"https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fjoins",[4123],[4165],{"type":49,"value":4166},"Joins",{"type":43,"tag":497,"props":4168,"children":4169},{},[4170],{"type":43,"tag":63,"props":4171,"children":4174},{"href":4172,"rel":4173},"https:\u002F\u002Fdocs.databricks.com\u002Faws\u002Fen\u002Fmetric-views\u002Fdata-modeling\u002Fcomposability",[4123],[4175],{"type":49,"value":4176},"Composability",{"type":43,"tag":4178,"props":4179,"children":4180},"style",{},[4181],{"type":49,"value":4182},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":4184,"total":2561},[4185,4197,4209,4224,4240,4254,4270,4283,4299,4312,4319],{"slug":4186,"name":4186,"fn":4187,"description":4188,"org":4189,"tags":4190,"stars":26,"repoUrl":27,"updatedAt":4196},"omni-admin","administer Omni Analytics","Administer an Omni Analytics instance — manage connections, users, groups, user attributes, permissions, schedules, and schema refreshes via the Omni CLI. Use this skill whenever someone wants to manage users or groups, set up permissions on a dashboard or folder, configure user attributes, create or modify schedules, manage database connections, refresh a schema, set up access controls, provision users, or any variant of \"add a user\", \"give access to\", \"set up permissions\", \"who has access\", \"configure connection\", \"refresh the schema\", or \"schedule a delivery\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4191,4192,4195],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},"CLI","cli",{"name":18,"slug":19,"type":16},"2026-04-06T18:10:58.235995",{"slug":4198,"name":4198,"fn":4199,"description":4200,"org":4201,"tags":4202,"stars":26,"repoUrl":27,"updatedAt":4208},"omni-ai-eval","evaluate Omni AI query accuracy","Evaluate Omni AI accuracy using Omni's built-in eval system — define a prompt set, run a judged eval against a model (or branch), and read the accuracy-judge verdicts. Use this skill whenever someone wants to evaluate Omni AI, benchmark Blobby, run regression tests, compare AI output across branches or model-context changes, measure AI quality, run A\u002FB tests on model changes, assess the impact of an ai_context or modeling change, or any variant of \"run evals\", \"test Blobby\", \"benchmark query generation\", \"compare AI results\", \"regression test\", \"how accurate is the AI\", or \"measure the impact of my changes\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4203,4204,4207],{"name":24,"slug":25,"type":16},{"name":4205,"slug":4206,"type":16},"Evals","evals",{"name":18,"slug":19,"type":16},"2026-04-06T18:10:59.485921",{"slug":4210,"name":4210,"fn":4211,"description":4212,"org":4213,"tags":4214,"stars":26,"repoUrl":27,"updatedAt":4223},"omni-ai-optimizer","optimize Omni models for AI","Optimize your Omni Analytics model for Blobby, the Omni Agent — configure ai_context, ai_fields, synonyms, sample_queries, and AI-specific topic extensions. Use this skill whenever someone wants to improve AI accuracy in Omni, make Blobby smarter, add AI context or example questions, curate which fields the AI sees, personalize AI context by user attribute, scope context to a model tier or agent, diagnose context-window pruning or truncation, control which topics AI can reach, troubleshoot why Blobby gives wrong answers, or any variant of \"make the AI better\", \"Blobby isn't answering correctly\", \"optimize for AI\", or \"teach the AI about our data\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4215,4218,4219,4222],{"name":4216,"slug":4217,"type":16},"AI Context","ai-context",{"name":24,"slug":25,"type":16},{"name":4220,"slug":4221,"type":16},"Data Modeling","data-modeling",{"name":18,"slug":19,"type":16},"2026-07-27T06:09:42.358967",{"slug":4225,"name":4225,"fn":4226,"description":4227,"org":4228,"tags":4229,"stars":26,"repoUrl":27,"updatedAt":4239},"omni-content-builder","manage Omni Analytics documents and dashboards","Create, update, and manage Omni Analytics documents and dashboards programmatically — document lifecycle, drafts, tiles, visualizations, filters, controls, and layouts — using the Omni CLI. Use this skill whenever someone wants to build a dashboard, create a workbook, add tiles or charts, configure dashboard filters or controls, update an existing dashboard's model, set up a KPI view, create visualizations, lay out a dashboard, arrange tiles or pages, create a document, edit a dashboard as a draft, publish a draft, change dashboard settings, rename a workbook, delete a dashboard, move a document to a folder, duplicate a dashboard, or any variant of \"build a dashboard for\", \"create a report showing\", \"add a chart to\", \"make a dashboard\", \"update the dashboard layout\", \"rename this document\", \"publish this draft\", \"move to folder\", or \"delete this dashboard\". Also use when modifying dashboard-level model customizations like workbook-specific joins or fields.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4230,4231,4232,4235,4238],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4233,"slug":4234,"type":16},"Dashboards","dashboards",{"name":4236,"slug":4237,"type":16},"Data Visualization","data-visualization",{"name":18,"slug":19,"type":16},"2026-04-06T18:11:02.007785",{"slug":4241,"name":4241,"fn":4242,"description":4243,"org":4244,"tags":4245,"stars":26,"repoUrl":27,"updatedAt":4253},"omni-content-explorer","find and organize Omni Analytics content","Find, browse, and organize content in Omni Analytics — dashboards, workbooks, folders, and labels — using the Omni CLI. Use this skill whenever someone wants to find an existing dashboard, search for content, list workbooks, browse folders, see what dashboards exist, find popular reports, download a dashboard as PDF or PNG, favorite content, manage labels on documents, or any variant of \"find the dashboard about\", \"what reports do we have\", \"show me our dashboards\", \"where is the sales report\", or \"download this dashboard\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4246,4247,4248,4249,4250],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4233,"slug":4234,"type":16},{"name":18,"slug":19,"type":16},{"name":4251,"slug":4252,"type":16},"Search","search","2026-04-06T18:11:04.516766",{"slug":4255,"name":4255,"fn":4256,"description":4257,"org":4258,"tags":4259,"stars":26,"repoUrl":27,"updatedAt":4269},"omni-embed","embed Omni Analytics dashboards","Embed Omni Analytics dashboards in external applications — URL signing, custom themes, iframe events, entity workspaces, and permission-aware content — using the @omni-co\u002Fembed SDK and Omni CLI. Use this skill whenever someone wants to embed a dashboard, sign an embed URL, customize the embedded theme, handle embed events, listen for clicks or drills in the iframe, send filters to an embedded dashboard, set up entity workspaces, look up embed users, build a permission-aware content list, white-label an embedded dashboard, or any variant of \"embed this dashboard\", \"customize the iframe theme\", \"handle click events from the embed\", \"filter the embedded dashboard\", \"set up embedding\", or \"what dashboards can this user see\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4260,4261,4262,4265,4266],{"name":24,"slug":25,"type":16},{"name":4233,"slug":4234,"type":16},{"name":4263,"slug":4264,"type":16},"Frontend","frontend",{"name":18,"slug":19,"type":16},{"name":4267,"slug":4268,"type":16},"SDK","sdk","2026-04-06T18:10:55.739544",{"slug":4271,"name":4271,"fn":4272,"description":4273,"org":4274,"tags":4275,"stars":26,"repoUrl":27,"updatedAt":4282},"omni-model-builder","build Omni Analytics semantic models","Create and edit Omni Analytics semantic model definitions — views, topics, dimensions, measures, relationships, and query views — using YAML through the Omni CLI. Use this skill whenever someone wants to add a field, create a new dimension or measure, define a topic, set up joins between tables, modify the data model, build a new view, add a calculated field, create a relationship, edit YAML, work on a branch, promote model changes, or any variant of \"model this data\", \"add this metric\", \"create a view for\", or \"set up a join between\". Also use for migrating modeling patterns since Omni's YAML is conceptually similar to other semantic layer definitions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4276,4277,4278,4279,4280],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4220,"slug":4221,"type":16},{"name":18,"slug":19,"type":16},{"name":4281,"slug":1110,"type":16},"YAML","2026-04-06T18:11:05.775943",{"slug":4284,"name":4284,"fn":4285,"description":4286,"org":4287,"tags":4288,"stars":26,"repoUrl":27,"updatedAt":4298},"omni-model-explorer","discover and inspect Omni Analytics models","Discover and inspect Omni Analytics models, topics, views, fields, dimensions, measures, and relationships using the Omni CLI. Use this skill whenever someone wants to understand what data is available in Omni, explore their semantic model, find specific fields or views, check how tables join together, see what topics exist, or asks any variant of \"what can I query\", \"what fields are available\", \"show me the model\", \"what data do we have\", or \"how is this data modeled\". Also use when you need to understand the Omni model structure before building or modifying anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4289,4290,4291,4294,4297],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4292,"slug":4293,"type":16},"Data Analysis","data-analysis",{"name":4295,"slug":4296,"type":16},"Knowledge Management","knowledge-management",{"name":18,"slug":19,"type":16},"2026-04-06T18:11:00.739003",{"slug":4300,"name":4300,"fn":4301,"description":4302,"org":4303,"tags":4304,"stars":26,"repoUrl":27,"updatedAt":4311},"omni-query","query Omni Analytics semantic layer","Run queries against Omni Analytics' semantic layer using the Omni CLI, interpret results, and chain queries for multi-step analysis. Use this skill whenever someone wants to query data through Omni, run a report, get metrics, pull numbers, analyze data, ask \"how many\" \u002F \"what's the trend\" \u002F \"show me the data\", retrieve dashboard query results, or extract data from an existing dashboard or workbook. Also use for table calculations and computed columns (running totals, percent-of-total, month-over-month \u002F period-over-period change, moving averages, rankings), open-ended multi-step analysis via agentic AI jobs, and running raw SQL through the semantic layer — even when the user doesn't say \"query\" (e.g. \"add a running total column\", \"what's our MoM growth\", \"analyze revenue trends\"). For building or editing a dashboard or chart use omni-content-builder; for adding a field or measure to the model use omni-model-builder — this skill retrieves and computes over data.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4305,4306,4307,4308,4309],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4292,"slug":4293,"type":16},{"name":18,"slug":19,"type":16},{"name":4310,"slug":2473,"type":16},"SQL","2026-04-06T18:10:56.974412",{"slug":4,"name":4,"fn":5,"description":6,"org":4313,"tags":4314,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4315,4316,4317,4318],{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"slug":4320,"name":4320,"fn":4321,"description":4322,"org":4323,"tags":4324,"stars":26,"repoUrl":27,"updatedAt":4332},"omni-to-snowflake-semantic-view","convert Omni topics to Snowflake views","Convert an Omni Analytics topic into a Snowflake Semantic View YAML definition. Use this skill whenever someone wants to export Omni metrics to Snowflake, create a Semantic View from an Omni topic, harden BI metrics into the warehouse, or bridge Omni's semantic layer with Snowflake Cortex Analyst.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4325,4326,4327,4328,4331],{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":4329,"slug":4330,"type":16},"Snowflake","snowflake",{"name":4281,"slug":1110,"type":16},"2026-04-06T18:11:25.009706",{"items":4334,"total":2561},[4335,4341,4347,4354,4362,4370,4378],{"slug":4186,"name":4186,"fn":4187,"description":4188,"org":4336,"tags":4337,"stars":26,"repoUrl":27,"updatedAt":4196},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4338,4339,4340],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":18,"slug":19,"type":16},{"slug":4198,"name":4198,"fn":4199,"description":4200,"org":4342,"tags":4343,"stars":26,"repoUrl":27,"updatedAt":4208},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4344,4345,4346],{"name":24,"slug":25,"type":16},{"name":4205,"slug":4206,"type":16},{"name":18,"slug":19,"type":16},{"slug":4210,"name":4210,"fn":4211,"description":4212,"org":4348,"tags":4349,"stars":26,"repoUrl":27,"updatedAt":4223},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4350,4351,4352,4353],{"name":4216,"slug":4217,"type":16},{"name":24,"slug":25,"type":16},{"name":4220,"slug":4221,"type":16},{"name":18,"slug":19,"type":16},{"slug":4225,"name":4225,"fn":4226,"description":4227,"org":4355,"tags":4356,"stars":26,"repoUrl":27,"updatedAt":4239},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4357,4358,4359,4360,4361],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4233,"slug":4234,"type":16},{"name":4236,"slug":4237,"type":16},{"name":18,"slug":19,"type":16},{"slug":4241,"name":4241,"fn":4242,"description":4243,"org":4363,"tags":4364,"stars":26,"repoUrl":27,"updatedAt":4253},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4365,4366,4367,4368,4369],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4233,"slug":4234,"type":16},{"name":18,"slug":19,"type":16},{"name":4251,"slug":4252,"type":16},{"slug":4255,"name":4255,"fn":4256,"description":4257,"org":4371,"tags":4372,"stars":26,"repoUrl":27,"updatedAt":4269},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4373,4374,4375,4376,4377],{"name":24,"slug":25,"type":16},{"name":4233,"slug":4234,"type":16},{"name":4263,"slug":4264,"type":16},{"name":18,"slug":19,"type":16},{"name":4267,"slug":4268,"type":16},{"slug":4271,"name":4271,"fn":4272,"description":4273,"org":4379,"tags":4380,"stars":26,"repoUrl":27,"updatedAt":4282},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4381,4382,4383,4384,4385],{"name":24,"slug":25,"type":16},{"name":4193,"slug":4194,"type":16},{"name":4220,"slug":4221,"type":16},{"name":18,"slug":19,"type":16},{"name":4281,"slug":1110,"type":16}]